1. 构造函数__construct()、析构函数__destruct()
分别在类初始化和类回收时调用。
class A{
public function __construct()
{
echo __FUNCTION__,PHP_EOL;
}
public function __destruct()
{
echo __FUNCTION__,PHP_EOL;
}
}
$obj = new A;
unset($obj);
2. __call($name,$arguments) 、__callStatic($name,$arguments)
__call()调用不存在的实例方法时会调用 , __callStatic()调用不存在的静态方法是会调用。
3. __set() 、__get()
设置或获取对象中不存在或非public属性时调用。
class A{
protected $b = 'b';
private $c = 'c';
public function __set($name, $value)
{
echo __FUNCTION__,' ',$name,' ',$value,PHP_EOL;
}
public function __get($name)
{
echo __FUNCTION__,' ',$name,PHP_EOL;
}
}
$obj = new A;
$obj->a;
$obj->b;
$obj->c;
$obj->a = 'test';
3. __isset() 、__unset()
对不可访问的属性调用isset()或empty()时调用 __isset() ,调用unset()时会调用__unset。
class A{
protected $b = 'b';
public function __isset($name)
{
echo __FUNCTION__,' ',$name,PHP_EOL;
}
public function __unset($name)
{
echo __FUNCTION__,' ',$name,PHP_EOL;
}
}
$obj = new A;
isset($obj->a);
unset($obj->b);
4. __sleep() 、__wakeup()
对对象调用serialize()和unserialize()时分别查找调用__sleep()和__wakeup()。
class A{
public $a = 'a';
protected $b = 'b';
private $c = 'c';
public function __wakeup()
{
echo __FUNCTION__, PHP_EOL;
}
public function __sleep()
{
echo __FUNCTION__,PHP_EOL;
return get_object_vars($this);
}
}
$obj = new A;
print_r($s = serialize($obj));
echo PHP_EOL;
print_r(unserialize($s));
5 . __toString()
当对象被当成字符串处理时会查找调用例如 echo $obj 。
6. __invoke()
把对象作为方法调用时会调用此方法。
7. __set_state()
对对象使用var_export方法时调用此方法
8. __debugInfo()
对对象使用var_dump时调用,此函数结果必须返回一个数组,决定返回哪些属性或自定义处理。
9. __clone()
使用clone关键字克隆对象时调用。