PHP面向对象三大特性
一、封装,保证类的安全和稳定,理论上类里的成员变量都要封装,封装的步骤是
第一步,将成员变量变为private,
第二步,在类里面做一个成员方法间接访问,
第三步,在该方法里面加限制条件,
class Ren{ public $name; public $sex; public $birthday; private $age; public function setage($age){ if($age>=18 && $age<=50){ $this->age = $age; } } }
以上例子是要求年龄在18到50之间,
封装一般用魔术方法set做,如
class Ren{ public $name; public $sex; public $birthday; private $age; public function __set($name,$value){ //$name代表成员变量名,$value代表成员变量值,在这里都形参,没有实际意义,参数是在调用封装变量时自动获取传入的 if($name=="age"){ if($value>=18 && $value<=50){ $this->$name = $value; } } } }
如此封装的成员变量调用时方法不变,但是已经封装好,所以只有在类里面才能看出是否封装
二、继承,子类可以继承父类的一切,
特点:单继承,一个子类只能有一个父类,一个父类可以有多个子类,
函数重写 override:子类可以对父类的函数进行重写,在子类写一个与父类函数名相同的函数,然后重写即可
重载 overload 一般在强类型语言出现 ,一个方法可以实现多种功能,函数名一样,但是参数不同,参数不同可以在于个数也可以在于参数的类型,
class Ren{ //创建人的类 public $name; public $sex; public function say(){ //父类的方法 echo "哈哈"; } } class China extends Ren{ //创建中国人的类,属于人的子类 public $yuyan; public function say(){ //函数重写 //调用父类的方法,形式上的调用,这样可以同时执行父类的函数和子类的函数 parent::say(); echo "你好"; } } $r = new China(); $r->say();
三、多态,当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,在调用该方法的时候表现出的不同,称为多态,
多态一般出现在强类型语言中,
运行多态,指代码运行中出现的多态
编译多态,指编写代码时就指定好的多态,就是重载。