この記事の例では、Zend Framework チュートリアルでの Zend_Registry オブジェクトの使用法を説明します。以下のように、参考のために全員と共有してください:
オブジェクト レジストリ (レジストリ) の使用
オブジェクト レジストリ (またはオブジェクト ウェアハウス) は、アプリケーション空間全体内でオブジェクトと値を保存するために使用されるコンテナです。オブジェクトをそこに保存すると、プロジェクト全体のどこでも同じオブジェクトを使用できます。この仕組みはグローバルストレージに相当します。
さらに、このクラスは配列オブジェクトなので、配列形式を使用してクラス メソッドにアクセスできます。
1. レジストリに値を設定します
コンテンツをレジストリに保存するには、静的メソッド set() を使用できます。
例 1. set() の使用例:
Zend_Registry::set('index', $value);
$value には、オブジェクト、配列、またはスカラーを指定できます。 set() を再度使用すると、レジストリ内の既存の値に新しい値を設定できます。
インデックス パラメーターは、配列のインデックス/キー名と同様に、配列を使用する場合と同様に、スカラー、つまり文字列または整数にすることができます。
2. レジストリ内の値を取得する
get() メソッドを使用して、レジストリ内の項目の値を取得できます。
例 2. get() メソッドの例:
$value = Zend_Registry::get('index');
getInstance() は静的レジストリ オブジェクトを返します。
レジストリ オブジェクトは反復可能です。
例 3. レジストリ オブジェクトを反復処理します:
$registry = Zend_Registry::getInstance(); foreach ($registry as $index => $value) { echo "Registry index $index contains:/n"; var_dump($value); }
3. レジストリ オブジェクトを作成します
静的メソッドを使用してレジストリ オブジェクトにアクセスするだけでなく、通常のオブジェクトを使用するのと同じように、レジストリ オブジェクトを直接インスタンス化することもできます。同じ。
静的メソッドを通じてレジストリ オブジェクトのインスタンスにアクセスすると、静的ストレージに便利で、プログラム内のどこからでもアクセスできます。
従来の新しい方法を使用してレジストリのインスタンスを作成する場合は、配列を使用してレジストリの内容を初期化できます。
例 4. レジストリ オブジェクトを作成する
$registry = new Zend_Registry(array('index' => $value));
このオブジェクト インスタンスを作成した後、配列オブジェクト メソッドを使用してそれを使用することも、静的メソッド setInstance( ) 例。
例 5. 静的レジストリを初期化する例
$registry = new Zend_Registry(array('index' => $value)); Zend_Registry::setInstance($registry);
静的レジストリ オブジェクトが初期化されている場合、setInstance() メソッドは Zend_Exception をスローします。
4. 配列のようにレジストリオブジェクトにアクセスします
一度に複数の値にアクセスしたり設定したりする場合は、配列メソッドを使用すると非常に便利です。
例 6. 配列メソッドへのアクセス例:
$registry = Zend_Registry::getInstance(); $registry['index'] = $value; var_dump( $registry['index'] );
5. オブジェクト メソッド アクセス レジストリ
オブジェクト指向スタイルを使用してレジストリ オブジェクトと属性名にアクセスすることも便利であることがわかります。オブジェクト内の はインデックスとして使用されます。 これを行うには、ArrayObject::ARRAY_AS_PROPS オプションを使用してレジストリ オブジェクトを作成し、静的インスタンスを初期化する必要があります。これは、静的レジストリに初めてアクセスする前に行う必要があります。このオプションを使用する場合、PHP の一部のバージョンにはバグがあるため、このオプションには注意してください。
例 7. オブジェクト形式でのアクセス:
//在你的bootstrap代码中: $registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS) Zend_Registry::setInstance($registry); $registry->tree = 'apple'; . . . //在程序的任何其它地方: $registry = Zend_Registry::getInstance(); echo $registry->tree; // echo's "apple" $registry->index = $value; var_dump($registry->index);
6. インデックスが存在するかどうかをクエリする
静的メソッド isRegistered() を使用して、特定のインデックスに対応する値が設定されているかどうかをクエリできます。
例 8. isRegistered() 例:
if (Zend_Registry::isRegistered($index)) { $value = Zend_Registry::get($index); }
配列オブジェクト内の特定のインデックスの値が設定されているかどうかを確認するには、通常の配列と同じように isset() 関数を使用できます。
例 9. isset() 例:
$registry = Zend_Registry::getInstance(); // using array-access syntax if (isset($registry['index'])) { var_dump( $registry['index'] ); } // using object-access syntax, if enabled if (isset($registry->index)) { var_dump( $registry->index ); }
7. レジストリ オブジェクトを拡張する
静的レジストリ オブジェクトは、Zend_Registry クラスのインスタンスです。機能を追加したい場合は、Zend_Registry クラスを継承し、このクラスを使用してオブジェクト レジストリにアクセスするように指定できます。静的メソッド setClassName() を使用して、使用するクラスを指定できます。このクラスは Zend_Registry のサブクラスである必要があることに注意してください。
例 10. 静的レジストリのクラス名を指定します:
Zend_Registry::setClassName('My_Registry'); Zend_Registry::set('index', $value);
レジストリにアクセスした後にクラス名を設定しようとすると、レジストリは例外をスローします。このクラス名をブーストラップ コード (つまり、index.php) に設定することをお勧めします。
8. 静的レジストリを削除します
これは必須ではありませんが、_unsetInstance() メソッドを使用してレジストリの静的インスタンスを削除できます。
[注意] データ損失のリスク
_unsetInstance() を使用すると、静的レジストリ内のすべてのデータが失われ、復元できなくなります。
_unsetInstance() メソッドが必要になる場合があります。たとえば、レジストリ オブジェクトが初期化された後に setInstance() または setClassName() を使用する場合は、これらのメソッドを使用する前に _unsetInstance() を使用して静的インスタンスを削除できます。
例 11. _unsetInstance() 例:
Zend_Registry::set('index', $value); Zend_Registry::_unsetInstance(); // 改变我们要使用的类 Zend_Registry::setClassName('My_Registry'); Zend_Registry::set('index', $value);
この記事が、Zend Framework フレームワークに基づいた PHP プログラミングの皆様のお役に立てれば幸いです。
Zend Framework チュートリアル Zend_Registry オブジェクトの使用状況分析に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。