2012-04-14 83 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

相關問題