__isset(); 未定义 的 属性调用 isset 时,调用。
__unset(); 未定义 的 属性调用unset 时,调用。
__get(); 调用一个类内 未定义 属性时,调用。
__set(); 给一个类内 未定义 属性赋值时,调用。
class C{
function __set($p, $p1){
var_dump(__METHOD__);
}
function __get($p){
var_dump(__METHOD__);
}
function __isset($p){
var_dump(__METHOD__);
}
function __unset($p){
var_dump(__METHOD__);
}
}
$c = new C;
var_dump(isset($c->a));
unset($c->a);
var_dump($c->a);
$c->a = 1;
=======================>
string(10) "C::__isset"
bool(false)
string(10) "C::__unset"
string(8) "C::__get"
NULL
string(8) "C::__set"
__invoke(); __debugInfo
class CallableClass
{
function __invoke($x) {
$x();
}
function __debugInfo(){
return ['property' => 1];
}
}
$obj = new CallableClass;
$obj(function(){var_dump(1);});//int(1)
var_dump(is_callable($obj));//bool(true)
var_dump($obj);//带着参数的对象。
__set_state(); 当调用 var_export() 导出类时,此静态 方法会被调用。
<?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);
?>