PHP 5.3__destruct
を使用してデータを書き込む際に、少し予期しない動作が発生することに気付きました。Zend_Session_Namespace
public function __destruct(){
$this->getSession()->data = $this->data;
}
// ....
private function getSession()
{
if (! self::$zendSession) {
// this next line is fine because the object is a singleton
self::$zendSession = new Zend_Session_Namespace(self::SESSION_NAMESPACE);
}
return(self::$zendSession);
}
デストラクタが呼び出されていますが、データは書き込まれていません。ただし、オブジェクトに対して必要なすべての操作が実行された後に暗黙的に destruct を呼び出し、スクリプトの終了前に破棄を強制すると、データは正常に書き込まれますが、これは行いたくありません。
このバグと関係があると思います: http://bugs.php.net/29032 (バグは私には少し古いようです)、一見したところ修正は良さそうです (シャットダウン関数として __destruct を登録します)。 、前に呼び出された$_SESSION
は使用できません)、しかし、デストラクタは 2 回呼び出されませんか (1register_shutdown_function
回は自動的に呼び出されますか?
確かにシャットダウン時にオブジェクト データの奇数ビットをセッションに書き込むことは解決されていますか? これが必要な場合、人々は何をしますか?
(OSX 10.6.6、Apache 2.2.15 (Unix)、PHP 5.3.3、Zend Framework 1.7.2)