php中的魔术方法总结

//声明一个类MagicTest

class MagicTest{

    protected $arr = new array();

//__set()和__get()

    public function __set($key,$value){

         $arr[$key] = $value;   

    }

    public function __get($key){

         return this->$arr[key];

    }

    public function __isset($name){
        echo "__isset invoked ";
        return false;
    }

    public function __unset($name){
        echo "unsetting property " . $name;
    }

//__call()和__callStatic()

    public function __call($name, $arguments){

        echo "calling ".$name."with parameters: ".implode(',',$arguments);

    }

    public static function __callStatic($name,$arguments){

         echo "calling static  function: ".$name."with parameters: ".implode(',',$arguments);

    }

//__tostring()和__invoke()

    public function __tostring(){

    }

    public function __invoke($name){  

    }

}

$obj = new MagicTest();

$obj->val = test;//__set($key,$value)被调用

echo $obj->val;//__get()被调用

isset($obj->value);

empty($obj->value);//isset($name)被调用

unset($obj->value);//unset($name)被调用

$obj->runtest(param1,param2);//__call($name,$arguments)被调用

MagicTest::runtest(param1,param2,param3); //__callStatic($name,$arguments)被调用

echo $obj; //tostring()被调用

$obj(param);    //invoke($name)被调用

$obj2 = clone $obj;//__clone被调用

魔术方法之属性重载
1. 在给不可访问属性赋值时,__set() 会被调用。
 2. 读取不可访问属性的值时,__get() 会被调用。
 3. 当对不可访问属性调用 isset() 和empty()时,__isset() 会被调用。
 4. 当对不可访问属性调用 unset() 时,__unset() 会被调用

__set();

__get();

 魔术方法之方法重载
 1. 当对象访问不存在的方法名称时,__call()方法会被自动调用
 2. 当对象访问不存在的静态方法名称时,__callStatic()方法会被自动调用

__call();

__callStatic();

 魔术方法
 1. 当对象被当做String使用时,__tostring()会被自动调用
 2. 当对象被当成方法调用时,__invoke()会被自动调用

__tostring()

__invoke()

 魔术方法之__clone():

原文地址:https://www.cnblogs.com/canfengyiyue/p/4370388.html