是否__destruct方法依赖于浏览器



我实际上认为,我会理解php __destruct方法的功能。但是今天我遇到了一个问题:

wordpress的ngg画廊插件包含nggAPI类,方法如下

function __destruct() {
    echo $this->output;
}

通过require_once包含

require_once (dirname (__FILE__) . '/xml/json.php');
exit();

除此之外,我不喜欢这种典型的WP风格的类工作,它应该工作。问题来了:只有在Chrome中打开时,__destroy才会被执行。在IE、Safari和Firefox中什么都不会发生。我已经检查了一千次了,真的没有缓存问题之类的。我实现了printOutput-Method而不是__destruct,并在脚本末尾调用它-现在它正在工作。

这可能吗??!对此有合理的解释吗?

No.

PHP在服务器端运行,因此在将响应发送到客户端之前执行。不管用哪个浏览器

根据PHP关于构造函数/析构函数的手册,一旦不再有对对象的引用或作为关闭序列的一部分,析构函数就会运行。

如果在析构函数中使用exit()停止脚本,则析构函数可以被中断。

同样,如果你试图调用父类的析构函数,你必须手动这样做。例如:

class Foo extends Bar
{
    public function __destruct()
    {
        parent::__destruct();
    }
}

无论如何,这都不是浏览器特有的,它是PHP中的一些东西。

最新更新