夜光序言:
人生幸福三诀:不要拿自己的错误来惩罚自己;不要拿自己的错误来惩罚别人;不要拿别人的错误来惩罚自己。有了这三条,人生就不会太累了……
正文:
PHP类和对象之重载
PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的。属性的重载通过__set,__get,__isset,__unset来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性。
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;
方法的重载通过__call来实现,当调用不存在的方法的时候,将会转为参数调用__call方法,当调用不存在的静态方法时会使用__callStatic重载。
class Car {
public $speed = 0;
public function __call($name, $args) {
if ($name == 'speedUp') {
$this->speed += 10;
}
}
}
$car = new Car();
$car->speedUp(); //调用不存在的方法会使用重载
echo $car->speed;
任务
理解PHP的重载方法,使用__call实现方法的重载,创建speedDown的方法使速度减少10。
//在这里使用重载实现speedDown方法
public function __call($name,$args){
if($name == 'speedDown'){
$this->speed -= 10;
}
}
/**
* Created by PhpStorm.
* User: 夜光
* Date: 2019/7/14
* Time: 21:43
*/
<?php
class Car {
public $speed = 10;
//在这里使用重载实现speedDown方法
public function __call($name, $args){
if($name == 'speedDown'){
$this->speed -= 10;
}
}
}
$car = new Car();
$car->speedDown(); //调用不存在的speedDown方法
echo $car->speed;