夜光带你走进 传奇语言php(59)进阶篇开始

本文介绍了PHP中的重载概念,包括属性重载和方法重载。通过魔术方法如__set、__get、__call等实现动态属性和方法的创建。提供了具体的代码示例,帮助读者更好地理解和实践。

夜光序言:

 

人生幸福三诀:不要拿自己的错误来惩罚自己;不要拿自己的错误来惩罚别人;不要拿别人的错误来惩罚自己。有了这三条,人生就不会太累了……

 

 

 

 

 

 

 

 

 

 

 

正文:

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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值