いろいろ準備中

[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の機能は紹介できたと思います。

コメントを投稿する