レジストリの使用法レジストリは、アプリケーション空間でオブジェクトや変数を保存するためのコンテナです。 変数をレジストリに保存すると、 そのオブジェクトはアプリケーション内でいつでも利用できるようになります。 この仕組みは、グローバルなストレージを使用する代わりに使用できます。 レジストリの典型的な使用法は、Zend_Registry クラスの静的メソッドを用いるものです。 一方、このクラスは配列オブジェクトでもあるので、 配列風のインターフェイスでアクセスすることもできます。 レジストリへの値の設定あるエントリをレジストリに保存するには、静的メソッド set() を使用します。 Example #1 set() メソッドの使用例
値としては、オブジェクトや配列、スカラーを指定できます。 レジストリの特定のエントリに保存されている値を変更するには、 set() を使用して新しい値を指定します。 インデックスにはスカラー値 (NULL、文字列あるいは整数) を指定します。 通常の配列と同じです。 レジストリからの値の取得エントリの内容をレジストリから取得するには、静的メソッド get() を使用します。 Example #2 get() メソッドの使用例
getInstance() メソッドは、 シングルトンレジストリオブジェクトを返します。 このレジストリオブジェクトは順次処理をすることが可能 (iterable) で、 レジストリ内の値に簡単にアクセスできます。 Example #3 レジストリの順次処理の例
レジストリオブジェクトの作成静的メソッドを使用して静的なレジストリにアクセスするだけでなく、 直接インスタンスを作成し、それをオブジェクトとして使用することもできます。 静的メソッドでアクセスするレジストリインスタンスは、 単なるインスタンスのひとつであり、静的に格納されています。 そのため、アプリケーション内のどこからでもアクセスできます。 Zend_Registry のインスタンスを作成するには、 ごく普通に new コンストラクタを使用します。 コンストラクタで Zend_Registry のインスタンスを作成する際に連想配列を渡すと、 レジストリのエントリを初期化できるようになります。 Example #4 レジストリを作成する例
Zend_Registry のインスタンスを作成すると、 配列風の方法でアクセスできるようになります。 あるいは、静的メソッド setInstance() を使用することで、このインスタンスを Zend_Registry のシングルトンインスタンスに設定することもできます。 Example #5 シングルトンレジストリの初期化の例
setInstance() メソッドは、もしすでに 静的レジストリが初期化されている場合に Zend_Exception をスローします。 レジストリへの配列風のアクセス複数の値を取得したり設定したりする場合は、 配列風の記法でアクセスすると便利でしょう。 Example #6 配列アクセスの例
オブジェクト形式でのレジストリへのアクセスオブジェクト指向の方式で、 インデックス名をオブジェクトのプロパティとしてアクセスできると便利でしょう。 そうするには、オプション ArrayObject::ARRAY_AS_PROPS を指定してレジストリオブジェクトを明示的に作成し、 静的インスタンスを初期化しなければなりません。
Warning
ArrayObject::ARRAY_AS_PROPS オプションの既知の問題PHP のバージョンによっては、 ArrayObject::ARRAY_AS_PROPS オプションを指定してレジストリを使用するとバグが発生することがあります。 Example #7 オブジェクト形式のアクセスの例
インデックスが存在するかどうかの確認レジストリの特定のインデックスが値を持っているかどうかを調べるには、 静的メソッド isRegistered() を使用します。 Example #8 isRegistered() メソッドの使用例 レジストリの特定のインデックスが値を持っているかどうかを配列風に調べるには、 通常の配列と同様に isset() を使用します。 Example #9 isset() メソッドの使用例
レジストリの拡張静的レジストリは Zend_Registry クラスのインスタンスです。 レジストリに何らかの機能を追加したい場合は、 Zend_Registry を継承したクラスを作成し、 それを静的レジストリで使用するシングルトンとして指定します。 クラスを指定するには、静的メソッド setClassName() を使用します。
Example #10 シングルトンレジストリのクラス名を指定する例
最初にレジストリにアクセスした後でクラス名を設定しようとすると、 レジストリは Zend_Exception をスローします。静的レジストリのクラス名は、 アプリケーションの起動ファイルで指定することをお勧めします。 静的レジストリの削除通常は不要ですが、レジストリの静的インスタンスを削除することもできます。 その際には、静的メソッド _unsetInstance() を使用します。 Warning
データを失うリスク_unsetInstance() を使用すると、 静的レジストリ内の全データが破棄され、 復旧することはできません。 このメソッドを使用するのは、たとえば、 シングルトンレジストリオブジェクトを初期化した後で setInstance() や setClassName() を使用する場合です。シングルトンインスタンスを削除することで、 シングルトンレジストリオブジェクトを設定した後であっても これらのメソッドを使用できるようになります。特別な場合を除き、 Zend_Registry をこの方式で使うことは推奨しません。 Example #11 _unsetInstance() メソッドの例
|