类与对象(续)
魔术方法
PHP 将所有以 (两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 为前缀
在特定的时候自动触发的方法,一般以双下划线开头
如
__construct()
new
时候调用__destruct()
销毁后调用__toString()
把对象当成字符串时调用__call()
访问不可访问方法时调用__callStatic()
访问不可访问静态方法时调用__set()
设置不可访问属性时调用__get()
访问不可访问属性时调用__isset()
isset()
不可访问属性时调用__unset()
unset()
不可访问属性时调用__sleep()
序列化之前调用 不能访问私有数据,可以用Serializable
接口代替__wakeup()
反序列化之前调用__invoke()
尝试以对象以函数形式使用时调用__clone()
clone
克隆时调用__debuginfo()
使用var_dump()
时决定你要显示的数据,返回数组。__set_state()
使用var_export()
-》类似于var_dump()但会输出合法的php代码,第二个参数为true会将返回值返回给变量。
<?php
class A
{
public $var1;
public $var2;
public static function __set_state($an_array) // As of PHP 5.1.0
{
$obj = new A;
$obj->var1 = $an_array['var1'];
$obj->var2 = $an_array['var2'];
return $obj;
}
}
$a = new A;
$a->var1 = 5;
$a->var2 = 'foo';
eval('$b = ' . var_export($a, true) . ';'); // $b = A::__set_state(array(
// 'var1' => 5,
// 'var2' => 'foo',
// ));
var_dump($b);
?>