0

だから私は次の問題を抱えています。リクエストの実行の最後にデータをデータベースに保存する必要があるセッションクラスがあります。基本的に、それが破壊されたとき。この場合、シングルトンパターンを使用しています。私はこのようなデストラクタを持っています:

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

しかし、そのコードを使用すると、chromeや他のブラウザからnet::ERR_CONNECTION_RESETを取得します。デストラクタをコメントアウトしてコンストラクタに配置すると、次のようになります。

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

_saveメソッドを直接呼び出すと、例外が返されません。

すべてが正常に動作します。何が間違っている可能性があり、その理由は何ですか?

ありがとう!

4

2 に答える 2

1

わかりました、私は解決策を見つけました。_save() メソッドは、データをデータベースに保存するいくつかのメソッドを呼び出していました。しかし!データベース インスタンスは SINGLETON であるため、どこにも参照がなく、データベース オブジェクトはこの時点で既に破棄されています。解決策は、データベース インスタンスへの参照をモデルのどこかに保存することでした。まだ何も破棄されていないため、register_shutdown_function が機能していたようです。

于 2012-04-15T19:31:33.970 に答える
-1

あなたのエラーはクロムや他のブラウザとは関係ありません.

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.

A. 「exit」がどこかで呼び出された場合

B. コードのどこかに致命的なエラーがある

C. 別のデストラクタでスローされた例外がある場合

D. デストラクタで例外を処理しようとした場合

$this->_save()Exceptionはメソッドであり、何らかの方法で呼び出している可能性があります

http://php.net/manual/en/function.register-shutdown-function.php _register_shutdown_function

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

これは、スクリプトが適切に終了するかどうかに関係なく機能すると思います

于 2012-04-14T16:21:37.370 に答える