Php Destruct被称为两次

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Php Destruct被称为两次脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
下面的代码说明了两次调用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脚本终止时,它会在清理时再次调用它.

如果您希望在脚本终止之前销毁对象,请取消设置()它.你应该只看到一次破坏性调用.

具体来说,你的类B创建一个自包含的类A实例.由于B也通过__call()将方法调用路由到A对象,这就是为什么B上的__destruct()调用在A上调用__destruct(); B没有定义析构函数并通过调用.

脚本宝典总结

以上是脚本宝典为你收集整理的Php Destruct被称为两次全部内容,希望文章能够帮你解决Php Destruct被称为两次所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。