[Zend Framework] Zend_Session_Namespace ④
1月 18th, 2008 Posted in Zend Framework
前回。
Zend_Session_Namespaceその他の機能を以下に書いていきます。
・getIterator()
Zend_Session_Namespaceでは、セッションデータをforeach文などで使えるように、IteratorAggregateインターフェースを実装していて、そのための関数です。
関数を呼び出すと、ネームスペース中のセッションの値がArrayObjectのオブジェクトが返ります。
・lock()
現在のセッションネームスペースを読込み専用にします。同一リクエスト内でのみ有効です。
現段階で影響を与えるところはSession_Namespaceの__set()で、読込み専用になっていると例外が発生します。
$foo = new Zend_Session_Namespace('foo'); try { $foo->a = 0; $foo->b = 1; $foo->lock(); $foo->c = 2; // 例外発生 } catch(Exception $e) { echo "例外が発生しました".PHP_EOL; foreach($foo as $key=>$value) { echo "$key:$value".PHP_EOL; } }
結果は
例外が発生しました a:0 b:1
セッション全体でのアクセス権限としては、これとは別にZend_Session_Abstractの$_writableというプロパティーで管理されています。
詳しくは書きませんが、これはZend_Sessionの以下の関数で設定できます。
stop() writeClose() destroy()
・unlock()
現在のネームスペースの読込み専用を解除します。
・unlockAll()
すべてのネームスペースの読込み専用を解除します。
$foo = new Zend_Session_Namespace('foo'); $bar = new Zend_Session_Namespace('bar'); $foo->lock(); $bar->lock(); $foo->unlockAll(); //$barのロックも解除 $foo->a = 0; $bar->b = 1; // 例外は発生しません
・isLocked()
現在のセッションネームスーペースが読み込み専用になっているかどうかを返します。
これでほぼ、Zend_Session_Namespaceの機能は紹介できたと思います。