コード

デストラクタ

2010年1月27日

現在、プラグインをサポートするため、plugin.phpを整備中です。ほとんどできました。

プラグインオプションを保存する際、SQLクエリーをそのつど発行するのではなく、Jeansのシャットダウン時にまとめて発行することで速度の向上を図ろうとしています(その前後で『BEGIN』と『COMMIT』を実行)。はじめ、この実装にオブジェクトのデストラクタ(__destruct()メソッド)を利用していたのですが、ここではまりました。

オブジェクトごとに、デストラクタの実行順序を制御したいのですが、どうもこれがうまくいきません。PHPに限った話ではないのですが、やはりデストラクタ部分の実装は難しいです。この部分でコードの実行をクラス内のメソッド呼び出しにとどめておけば、個々のデストラクタはそれぞれ問題なく実行されます。しかし、制御が他のオブジェクトに依存するようなケースでうまく実行させるのは、PHPの内部構造までちゃんと把握していないと無理だと感じました。

そこで、register_shutdown_function()でcore::shutdown()を登録し、ここからそれぞれのクラスのshutdown()メソッドをスタティックに呼び出すことにしました。register_shutdown_function()で登録した関数の実行は、オブジェクトの破棄よりも先に起こるようです(5.2と5.3の両方で確認しました)。

この方法で、うまく制御できているように思います。プラグインでもshutdown()メソッドが使えるので、多分、便利です。

コメント

コメントはありません

コメント送信