php类之重载
PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的。属性的重载通过__set,__get,__isset,__unset来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性。
class Car { private $ary = array();//定义一个私有空数组 //通过魔术方法__set给不存在属性赋值 public function __set($key, $val) { $this->ary[$key] = $val; } //通过魔术方法__get获取不存在的属性值 public function __get($key) { if (isset($this->ary[$key])) { return $this->ary[$key]; } return null; } //通过魔术方法__isset判断不存在的属性是否设置 public function __isset($key) { if (isset($this->ary[$key])) { return true; } return false; } //通过魔术方法__unset销毁不存在的属性 public function __unset($key) { unset($this->ary[$key]); } } $car = new Car(); $car->name = '汽车'; //name属性动态创建并赋值 echo $car->name;//汽车
方法的重载通过__call来实现,当调用不存在的方法的时候,将会转为参数调用__call方法,当调用不存在的静态方法时会使用__callStatic重载。
class Car { public $speed = 0; //当类中不存在调用的方法时候,将会调用__call方法,$name方法名称,$args方法参数。 public function __call($name, $args) { if ($name == 'speedUp') { $this->speed += 10; } } } $car = new Car(); $car->speedUp(); //调用不存在的方法会使用重载 echo $car->speed;