Zend Framework - Zend_Registry編

HOME | TOP

■ 概要


Zend_Registryクラスは、どこででもデータをセットでき、その値をどこからでも参照できるグローバル変数みたいなものです。
非常に便利なので、Zend Frameworkのコンポーネント内でもよく使われています。

文字列や数値の他、オブジェクトやファイルポインタのようなリソースなどでも、名前空間が違っていても共有して使うことができて非常に便利です。

つまりPHPの定義済み$GLOBALSグローバル変数に似ています。

ではなぜ既存の$GLOBALS変数が利用できるのにあえてわざわざこのZend_Registryクラスを設けたのでしょうか?
私が思うに、以下のことが考えられます。

Zend Frameworkはコンポーネント同士の依存度が低いので特定のクラスだけをZF以外からライブラリ的に利用することができます。
このことによるZF以外のコードとZF内コード間のグローバル変数同士の競合・衝突を避けるためにZF内では独自のZend_Registryを使って競合することを防いでいる。

そんなところだろうと思います。


PHPにはグローバルに使える値としてその他にdefine()によるマクロ置換もありますが、当然のことながらこれは文字列定数および数値定数しか置換できません。
なので少なくともZF内コードでグローバルな変数を持ちたい時にはZend_Registryクラスを利用するのが手っ取り早くてスマートな方法になるでしょう。


■ 静的なセットと取得


インスタンス化しない(new演算子を使わない)でそのままデータのセットをしてその値を参照することができます。(静的メソッド&シングルトンゆえ)



シンプルな使い方です。

配列の場合は以下のようになります。



表示結果
0: Boo
1: Foo
2: Woo

■ インスタンスを取得して操作




上記のように取得したインスタンスからは、配列風やオブジェクト形式の値参照をすることができます。

またインスタンスを使って、別のキーに配列風に値をセットしたりもできます。


2010(C)Mingw