PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的。
PHP允许通过实现特殊的代理方法对属性的访问和方法的调用进行重载,这
些代理方法将在相关的属性或者方法不存在时调用。该特性让你在中断这些
动作并定义你自己的功能时获得巨大的灵活性。
1.属性的重载
属性的重载是通过__set,__get,__isset,__unset来分别实现对不存在的属性的
赋值、读取、判断属性是否设置、销毁属性。
例1:
class Car{
private $ary=array();
public function __set($key,$val){
$this->ary[$key]=$val;
}
public function __get($key){
if(isset($this->ary[$key])){
return $this->ary[$key];
}
return null;
}
public function __isset($key){
if(isset($this->ary[$key])){
return true;
}
return false;
}
public function __unset($key){
unset($this->ary[$key]);
}
}
$car=new Car();
$car->name="小汽车"; //name属性动态创建并赋值
echo $car->name; //输出"小汽车"
2.方法的重载
方法的重载通过__call来实现,当调用不存在的方法的时候,将会转
为参数调用__call方法。当调用不存在的静态方法时会使用__callStatic
重载。
例2:
class Car{
public $speed=0;
public function __call($name,$args){
if($name=="speedUp"){
$this->speed+=50;
}
}
}
$car=new Car();
$car->speedUp(); //调用不存在的方法会使用重载
echo $car->speed;
来源:http://www.imooc.com/