class A {
function hi(){ echo 'hi'; }
function __destruct(){
echo 'destroy';
}
}
class B{
public $this_ = '';
function __construct(){
$this->this_ = new A;
}
function __call($method, $params) {
return call_user_func_array(array($this->this_, $method), $params);
}
}
$b = new B;
$b->__destruct();
输出:
destroydestroy
编辑
zneak和TomcatExodus都是正确的。如果我只是:
[..code..]
$b = new B;
$b->__destruct();
print 'end of script';
输出将显示:
destroyend of scriptdestroy
B
创建了类A
的一个实例,并且B
也使用__call()
来路由到自包含的A
对象,所以对B
调用__destruct()
会被路由到自包含的A
实例。在脚本终止时,所有对象都离开内存,A
对象再次触发析构函数。我相信我们的答案仍然是正确的,只是情况有些扭曲。 - Dan Lugg