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;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • __call() 方法用于监视错误的方法调用。 __call()(Method overloading) 为了避免...
    雪碧spirit阅读 621评论 0 1
  • 一、数组 1、数组定义 数组就是一个键值对组成的语言结构,键类似于酒店的房间号,值类似于酒店房间里存储的东西。 $...
    空谷悠阅读 821评论 4 11
  • 狮子岩。斯里兰卡曾伽罗王朝统治时期的第二个首都。两位王子争夺王位的血腥历史。杀父夺位的大王子为躲避弟弟的追杀,在茫...
    花瓣尖的舞蹈阅读 439评论 0 2
  • 今天国庆放假了 回到了一个月未归的家,见到了许久未见的父母 内心很激动,很想他们,我想无论我今后到哪里,心中始终最...
    Lemon_XIXI阅读 288评论 0 0
  • 冬夜深沉 月牙的光像为人间偷来的光明 而一只饿得发疯的老鼠可不管这么多 它要抱着那仅有的月牙啃呀啃呀 因为它是一个...
    楼台花舍阅读 258评论 0 0