面向对象三大特性:
1.封装; 2.继承; 3.多态
封装:
目的:为了让类更加安全。
步骤:
1.将成员变量变为private,不能从外界访问;
2.在类里面做一个成员方法来间接访问;
3.在该方法里面加限制条件。
方法一:
class Ren{ public $name; public $sex; public $birthday; private $age; public function setage($age){ if($age>=18 && $age<=50){ $this->age = $age; } } public function getage(){ return $this->age; } } $r = new Ren(); $r->name = "张三"; $r->setage = 20;
方法二:魔术方法
class Ren{ public $name; public $sex; public $birthday; private $age; public function __set($name,$value){ if($name=="age"){ if($value>=18 && $value<=50){ $this->$name = $value; } }else{ $this->$name = $value; } } public function __get($name){ return $this->$name; } } $r = new Ren(); $r->name = "张三"; $r->age = 20; //自动调用魔术方法__set echo $r->age; //自动调用魔术方法__get var_dump($r);
其中__set($name,$value)中第一个值为变量名,第二个为变量值。
继承:
概念:子类可以继承父类的一切,且可扩展自己的内容(父类不需要太具体)。
特点:单继承,即一个子类只能有一个父类,同一个父类可以有多个子类。
制作一个父类:
class Ren{ public $name; public $sex; public function say(){ echo "人在讲话"; } }
制作子类:
class China extends Ren{ public $yuyan; public function say(){ //调用父类里面的方法 parent::say(); echo "你好"; } } $c = new China(); $c->say();
子类:
1.可扩展自己的内容;
2.可以对父类的方法进行重写,即函数重写(override)
重写(override)对比重载(overload):
(1)重写即子类对父类的方法进行重写;
(2)重载发生于强类型语言中,让一个方法实现多个功能;
重载条件:①同名方法; ②参数不同; ③参数相同,类型不同。
多态:
概念:当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,在调用该方法的时候所表现出的不同,我们称为多态。
条件:
1.必须有集成存在;
2.有重写存在;
3.方法不同。
多态一般出现在强类型语言中,分为运行多态和编译多态:
运行多态指代码运行中出现的多态
编译多态指的就是重载,重载在编译过程中会出现的不同。
多态常发生在强类型语言中:同一类型,指向不同输出也不同,父类的引用完全可以指向子类的实例。