所以我有以下问题。 我有一个会话类,应在请求执行结束它的数据保存到数据库中。 基本上,当它被破坏。 我在这种情况下,使用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方法不返回任何例外,当我直接调用它。
一切工作正常。 出了什么问题,为什么?
谢谢!
好吧,我找到了解决办法。 该_save()方法调用了一些方法即是将数据保存到数据库中。 但! 数据库实例是一个单独的,所以没有引用任何地方和数据库对象在这一点上已经被破坏。 解决的办法是保存在某个地方在模型的参考数据库实例。 貌似register_shutdown_function是工作,因为什么也没有尚未销毁的。
你的错误有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?