php 魔术方法

//实例化对象时,会调用对象的__construct方法
$obj = new Object();
//给对象不存在的属性赋值时,会调用对象的__set方法
$obj->title = "hello";
//使用对象不存在的属性时,会调用对象的__get方法
echo $obj->title;
//调用对象不存在的方法时,会调用对象的__call方法
$obj->test("hello",123,567);
//调用不存在的类静态方法时,会调用类的__callStatic方法
Object::staticMethod("static","not found method");
//直接输出对象时,会调用对象的__toString方法
echo $obj;
//将一个对象当作函数一样使用时,会调用对象的__invoke方法
echo $obj("test");
//克隆对象时,会调用对象的__clone方法
$obj2 = clone $obj;
//判断对象属性是否存在时,会调用对象的__isset方法
var_dump(isset($obj->aaa));
//销毁对象属性时,会调用对象的__unset方法
unset($obj->aaa);


class Object{

    protected $array = array();

    function __construct()
    {
        echo __METHOD__."你正在实例化对象<br>";
    }

    function __set($name, $value)
    {
        $this->array[$name]=$value;
    }

    function __get($name)
    {
        return $this->array[$name];
    }

    function __call($name, $arguments)
    {
        var_dump($name,$arguments);
        return "magic function\n";
    }

    static function __callStatic($name, $arguments)
    {
        var_dump($name,$arguments);
        return "magic static function";
    }

    function __toString()
    {
        return __CLASS__.'<br>';
    }

    function __invoke($arguments)
    {
        var_dump($arguments);
        return __METHOD__.'<br>';
    }

    function __clone()
    {
        echo __METHOD__."你正在克隆对象<br>";
    }

    function __isset($name)
    {
        echo __METHOD__."你想判断有没有属性".$name."<br>";
        return 1;
    }

    function __unset($name)
    {
        echo __METHOD__."你想删除属性".$name."<br>";
    }


    function __destruct()
    {
        echo __METHOD__."你正在注销对象<br>";
    }



}



转载于:https://my.oschina.net/tongjh/blog/614725

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值