私はいくつかのanswers on object destruction orderを見てきましたが、すべての順序が保証されていないことを指摘しています。私は順序を制御することができないので、私はすべてのオブジェクトが破壊された後に関数を呼び出すと思います。すべてのオブジェクトが破棄された後にPHP関数を呼び出す
register_shutdown_functionは、オブジェクト破壊の前に呼び出されるため、オプションではありません。私はオブジェクトを使用してset_error_handlerのようなトリックを見てきたので、 "遅く"呼び出されますが、それだけでは十分ではありません。
この問題の背景は、complex CMSです。ルート(ビュー)レイヤーには数十のファイルがあります。共通のブートインクルードがありますが、シャットダウン時には共通のものはありません。私は共通の継承された基本クラスを介してAPCuオブジェクトキャッシュを使用しており、オブジェクトがパージされていることを確認する必要があります。ページの読み込み中に作成された同じオブジェクトの任意の2つのインスタンスに対して、自分自身をパージすることができ、もう1つは自分自身をキャッシュすることができます。明らかにパージは他のすべてよりも優先されるので、グローバルなキャッシュキーセットでapc_deleteを呼び出すと、すべての__destruct()のパージが完了します。
興味深い問題です。 「ページロード中に作成された同じオブジェクトの任意の2つのインスタンスに対して、それ自体をパージしたいと思うかもしれないし、もう1つはキャッシュすることがデザイン上の欠陥のように思えるかもしれません。オブジェクトのすべてのインスタンスを常に最新のものにしたいとは思わないでしょうか?私はあなたのキャッシング/ローディング層がこれを処理すると思います。 (私は具体的にbitweaverについて何も知らない。) –
こんにちはマット、デザインの欠陥コメントは私に考えさせてくれました。あなたは正しいです、そして、今私はちょうどキャッシュにオブジェクトを格納しようとする前に、削除されたリストをチェックします。より適切な解決策ですが、可能ならばPHPで最後の "最後の呼び出し"関数を実行する方法を知りたいです。 – Stickley