gpt4 book ai didi

Php Destruct 被调用两次

转载 作者:可可西里 更新时间:2023-10-31 23:52:00 24 4
gpt4 key购买 nike

下面的代码说明了 destruct() 被调用了两次。我想知道为什么?

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

最佳答案

调用 destruct 不会破坏对象。您第一次使用 __destruct() 调用它,然后当 PHP 脚本终止时,它会在清理时再次调用它。

如果您希望在脚本终止之前销毁该对象,请unset() 它。您应该只看到一个 destruct 调用。


具体来说,您的类 B 创建了类 A 的自包含实例。由于 B 还通过 __call() 将方法调用路由到 A 对象,这就是 __destruct() 调用的原因B 正在调用 A 上的 __destruct()B 没有定义析构函数并传递调用。

关于Php Destruct 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5201342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com