PHP __destruct导致净:: ERR_CONNECTION_RESET register

2019-10-31 15:34发布

所以我有以下问题。 我有一个会话类,应在请求执行结束它的数据保存到数据库中。 基本上,当它被破坏。 我在这种情况下,使用Singleton模式。 我有这样的析构函数:

public function __destruct()
{
    $this->_save(); // _save is public
    // exit('I can reach this point with no error');
}

但与代码我得到的净:: Chrome和其他浏览器ERR_CONNECTION_RESET。 如果我注释掉的析构函数,并把此在的构造函数:

register_shutdown_function(array($this, '_save'));

该_save方法不返回任何例外,当我直接调用它。

一切工作正常。 出了什么问题,为什么?

谢谢!

Answer 1:

好吧,我找到了解决办法。 该_save()方法调用了一些方法即是将数据保存到数据库中。 但! 数据库实例是一个单独的,所以没有引用任何地方和数据库对象在这一点上已经被破坏。 解决的办法是保存在某个地方在模型的参考数据库实例。 貌似register_shutdown_function是工作,因为什么也没有尚未销毁的。



Answer 2:

你的错误有nothign做克罗姆或其他浏览器。

如果你看一下PHP文档http://php.net/manual/en/language.oop5.decon.php

The destructor method will be called as soon as there are no other references to a particular object, or in any order during the shutdown sequence.

答:如果“退出”在某处称为

在代码B.致命的错误的地方

C.如果在另一个析构函数抛出的异常

D.如果你试图在析构函数来处理异常

$this->_save()是一种方法,它可能调用Exception的一种方式或其他

虽然register_shutdown_function http://php.net/manual/en/function.register-shutdown-function.php

Registers a callback to be executed after script execution finishes or exit is called

我会认为这会工作的天气脚本终止正常与否



文章来源: PHP __destruct is causing net::ERR_CONNECTION_RESET register_shutdown_function is not. What's the difference?