面向对象编程的三特点: 封装性,继承性(PHP支持单继承),多态性 PHP的一个类必须在一段代码段中,即一个“” class PhpClass{ public $name; public function toString(){ return 'PhpClass'; } }
定义成员方法: [关键词] function 方法名(){...} 访问成员方法: 对象名->成员方法 定义成员变量: [关键字] 成员变量名 访问成员变量: 对象名->成员变量
关键字可以使用 public、private、protected、static和final中的任意一个 定义类常量: const 常量名 访问类常量: 类名::常量名 public $name; const PI = 3.1415926; // 不能有修饰词 public function toString(){ return 'PhpClass'; } public function printPI(){ echo PhpClass::PI.' '; // 直接通过类名访问 } public function printName(){ echo $this->name; // 注意此处的写法 } } $lycClass = new PhpClass(); echo $lycClass::PI.' '; // 通过对象访问 echo PhpClass::PI.' '; echo $lycClass->toString().' '; $lycClass->name = 'Lyc'; $lycClass->printName();
构造方法和析构方法: 构造方法: 不写会默认一个 void __construct([mixed args [,...]]) 下划线为两个 析构方法:
void __destruct(void) 下划线为两个 php使用垃圾回收机制,不用 unset 函数析构方法也会自动被调用 class PhpClass{ public $name; //public function __construct(){} PHP不支持 C++、java 形式上的方法重载 public function __construct($name){ $this->name = $name; } public function __destruct(){ echo '析构一下...'; } } $lycClass = new PhpClass('lyc'); echo $lycClass->name; //unset($lycClass); 不写也会调用 __destruct()
继承和多态 继承: 在PHP中子类可以继承父类的所有public和protected修饰的成员变量和方法,包括构造方法。 声明继承的格式: class subClass extendes superClass{ ...... } 多态:(覆盖和重载两种,覆盖和c++、java中重写相同) 重载概念和c++、java中的重载概念相同,但实现方式不同,重载实例:
class PhpClass{ public $nae; // PHP中有很多以两个下划线开头的方法,被称为魔术方法*********************** /* __call()方法的作用是: 当程序试图调用不存在或不可见的成员方法时 * PHP会先调用__call()方法来存储方法名及其参数。__call()方法包含 * 两个参数,即方法名和方法参数。其中,方法参数是以数组形式存在的 */ function __call($name, $arguments){ // 通过count($arguments)获得参数个数 $argNum = count($arguments); //echo $argNum.'*************** '; if($name == 'right'){ // 一下方法调用中的 $this-> 不可省略 switch($argNum){ case 0: $this->right0(); break; case 1: $this->right1($arguments[0]); break; case 2: $this->right2($arguments[0],$arguments[1]); break; default: echo '参数可能多了,我不干了... '; } }else if($name == 'left'){ switch($argNum){ case 1: $this->left1($arguments[0]); break; case 2: $this->left2($arguments[0],$arguments[1]); break; default: echo '参数不对,我不干了... '; } }else{ echo '什么也不做...'; } } //几种实现重载的方法,方法名不相同 public function right0(){ echo 'right0 '; } public function right1($arg){ echo 'right1 '.$arg.' '; } public function right2($arg1,$arg2){ echo 'right1 '.$arg1.' '.$arg2.' '; } public function left0(){ echo 'left0 '; } public function left1($arg){ echo 'left1 '.$arg.' '; } public function left2($arg1,$arg2){ echo 'left1 '.$arg1.' '.$arg2.' '; } } $lyc = new PhpClass(); $lyc->left(); // 此处实现重载 $lyc->left('LEFT'); $lyc->left('LEFT','LYC'); $lyc->right(); $lyc->right('RIGHT'); $lyc->right(123,'LYC'); $lyc->right(123,'lyc','right');
|