PHP中把以两个下划线开头的方法称为魔术方法,这些方法在PHP中充当了举足轻重的作用。 魔术方法包括:
construct(),类的构造函数
destruct(),类的析构函数
call(),在对象中调用一个不可访问方法时调用
callStatic(),用静态方式中调用一个不可访问方法时调用
get(),获得一个类的成员变量时调用
set(),设置一个类的成员变量时调用
isset(),当对不可访问属性调用isset()或empty()时调用
unset(),当对不可访问属性调用unset()时被调用。
sleep(),执行serialize()时,先会调用这个函数
wakeup(),执行unserialize()时,先会调用这个函数
toString(),类被当成字符串时的回应方法
invoke(),调用函数的方式调用一个对象时的回应方法
set_state(),调用var_export()导出类时,此静态方法会被调用。
__clone(),当对象复制完成时调用
魔术方法
__get($name)–
触发时机:当调用一个不访问的成员属性的时候,会自动触发,可以利用这个方法来完成对不可调用的属性进行调用,但是不能设置值
___set($name,value)–
触发时机:当给一个不可访问的成员属性赋值的时候,会自动触发这个方法,可以利用这个方法完成对不可以访问的属性进行赋值
__isset($name)—
触发时机:当使用isset()函数来判断一个对象的属性的时候,如果这个属性不存在或者不能被访问的时候会触发这个魔术方法
__call($method,args)—
触发时机:当调用一个不存在的成员方法或者是不可访问的成员访问的时候会被触发
__callStatic($method,args)–
触发时机:当调用一个不存在的成员方法或者是不可访问的成员访问的时候会被触发
__unset()—
触发时机:当要销毁一个不可访问的或者不存在的成员属性的时候会被调用
__sleep()—
触发时机:当使用serialize把对象进行序列化的时候会被触发
php public function __sleep() { return array('xxx');//指定可以被序列化的属性 }
__wakeup()
触发时机:当使用unserialize的反序列化的时候会被自动触发
1
2
3
4
public function __wakeup()
{
}
__toString()
触发时机:在echo一个对象的时候会被触发
PHP public function __toString() { return '小可爱'; }
__clone()
对象复制可以通过 clone 关键字来完成(如果可能,这将调用对象的 __clone() 方法