2012-04-14 42 views
0

所以我有以下问题。 我有一个会话类应该在请求执行结束时将其数据保存到数据库。基本上,当它被破坏时。 我在这种情况下使用单例模式。 我有这样的析构函数:PHP __destruct导致net :: ERR_CONNECTION_RESET register_shutdown_function不是。有什么不同?

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方法不返回任何例外,当我直接调用它。

一切工作正常。什么可能是错的,为什么?

谢谢!

+0

那么你需要启用错误日志记录来确定是否在该_save函数中发生了致命错误。除非你不这样做,否则很难说什么触发了连接重置。我认为这是关机阶段的PHP错误。 – hakre 2012-05-23 23:07:10

回答

1

好的,我找到了解决方案。 _save()方法正在调用一些将数据保存到数据库的方法。但!数据库实例是SINGLETON,因此在任何地方都没有引用,并且此时数据库对象已经被销毁。解决方案是将引用保存到模型中某处的数据库实例。看起来像register_shutdown_function正在工作,因为没有被破坏。

-1

您的错误与crome或其他浏览器没有关系。

,如果你看看PHP文件http://php.net/manual/en/language.oop5.decon.php

​​

A.如果 “退出” 在代码

C.如果某个地方所谓

B.致命的错误某处有是另一个析构函数中抛出的异常

D.如果尝试在des中处理异常tructor

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

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

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

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

+0

我知道它与我的浏览器无关。我只会遇到这种错误。就像我说的,_save()方法不返回任何异常。 __destruct()应该没有问题,因为所有需要的引用仍然存在。 – 2012-04-14 16:36:06

+0

它不必返回...你有没有实施?我只在你提供的有限信息上工作 – Baba 2012-04-14 16:40:35

+0

_save()方法正在调用一些将信息保存到数据库的模型方法。此方法没有任何错误,无论如何警告。 当手动调用它的作品。当被register_shutdown_function调用时也是如此。当它被析构函数调用时,我只有问题。 – 2012-04-14 16:45:17

相关问题