面向对象的三大特性:封装,继承,多态。
一、封装:目的:如何做类,让类更安全。
让一些成员变量不能被外界直接被访问。
方法:
1.将成员变量变为private。
2.在类里面做一个成员方法来间接访问。
3.在该方法里面加限制条件
4. 标准情况下每一个成员变量都要做封装。
class Ren{ public $name; public $sex; public $birthday; private $age; //将成员变量变为private 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); var_dump($r);
为了简化用
魔术方法:
public function __set($name,$valus){ if($name=="age"){
if($value>=18 && $value<=50){
$this->$name = $value;
}else{
$this->$name = $vaule;
}
} }
public function __get($name){
return $this->$name;
}
$r->age =20 //自动调用魔术方法__set
echo $r->age;//自动调用魔术方法__get
二、继承
概念:子类可以继承父类的一切。父类起到指导性的作用。
特点:单继承(一个子类只能有一个父类,一个父类可以有多个子类)
关键字: extends
class Ren{ public $name; public $sex; public function say(){ echo "人在讲话"; } } class China extends Ren{ //有父类的所有内容
public $yuyan; //扩展自己的内容
public function say(){ //函数重写:子类可对父类的函数重写。
parent::say(); //调用父类里面的方法
echo "你好";
}
public function test(){ //函数重载:同名方法,参数个数不同或类型不同,实现不同功能
echo "测试";
}
public function test($a){
echo "aaaa";
}
public function test($a,$b){
echo "bbbbb";
}
} $c = new China(); $c->say();
重写:子类可对父类的函数重写。override
重载:一个方法多个功能,因为参数个数不同。方法名相同,参数个数不同。也叫编译多态。overload
多态:当父类引用指向子类实例时,由于子类对父类方法进行了重写,在调用该方法的时候表现的不同,称为多态。也叫运行多态。