php的常用魔术方法

只能说常用,因为魔术方法太多了,但是我们经常打交道的有限。

__construct():
类的构造方法,实例化类时调用:
class Bar{
    function __construct($name){
        $this->name = $name;
        echo "call construct";
    }
}
new Bar();//call construct;
__destruct()
类的析构方法,销毁对象时调用:
class Bar{
    function __destruct(){
        echo "destruct";
    }
}
$bar = new Bar();
$bar = null;//destruct
unset($bar);//destruct
__get()
__set()
__get()和__set()是一对,起到的作用仿佛是为每个成员变量都隐含的设置了get和set方法,
所以,在外部设置局部变量也成为可能,就像是访问public权限的变量一样。
class Bar{
    private $name;
    function __get($key){
        return $this->$key;
    }
    function __set($key,$value){
        $this->key = $value;
    }
}
$bar = new Bar();
$bar->name = 'foo';
echo $bar->name;//foo
__clone()
使用clone自动调用__clone()方法:
class Bar{
    function __clone(){
        echo "clone object";
    }
}
$bar = new Bar();
$foo = clone $bar;//clone object

关于__clone,官方有更好的说明

__sleep()
序列化对象时调用
__wakeup()
反序列化对象时调用

与一般的对象(如数组),类对象(自定义的class)的实例化和反实例化,尤其是单例(singleton)的序列化比较复杂,我们将用另一篇文章来说明。

__toString()
打印一个对象时调用:
class Bar{
    private $item = array(1,2,3);
    function toString(){
        echo implode($this->item,',');
    }
}
__invoke()
以函数的方式调用一个方法时自动调用__invoke():
class Bar{
    function __invoke($str)
    {
        // TODO: Implement __invoke() method.
        echo $str;
    }
}

$bar = new Bar;
$bar('foo');//foo

你可能感兴趣的:(php的常用魔术方法)