この記事では、Zend Framework チュートリアルの Zend_Registry オブジェクトの使用方法を例とともに説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
オブジェクトレジストリ(レジストリ)を使用する
オブジェクト レジストリ (またはオブジェクト ウェアハウス) は、アプリケーション空間全体でオブジェクトと値を保存するために使用されるコンテナです。オブジェクトをそこに保存すると、プロジェクト全体のどこでも同じオブジェクトを使用できます。この仕組みはグローバルストレージに相当します。
さらに、このクラスは配列オブジェクトであるため、配列形式を使用してクラス メソッドにアクセスできます。
1. レジストリに値を設定します
項目をレジストリに保存するには、静的メソッド set() を使用できます。
例 1. set() の使用例:
リーリー$value には、オブジェクト、配列、またはスカラーを指定できます。 set() を再度使用すると、新しい値をレジストリに既に存在する値に設定できます。
インデックス パラメーターは、配列のインデックス/キー名と同様に、配列を使用する場合と同様に、スカラー、つまり文字列または整数にすることができます。
2. レジストリの値を取得します
get() メソッドを使用して、レジストリ内の項目の値を取得できます。
例 2. get() メソッドの例:
リーリーgetInstance() は静的レジストリ オブジェクトを返します。
レジストリ オブジェクトは反復可能です。
例 3. レジストリ オブジェクトを反復処理します:
リーリー3. レジストリ オブジェクトを作成します
静的メソッドを使用してレジストリ オブジェクトにアクセスするだけでなく、通常のオブジェクトを使用するのと同じように、レジストリ オブジェクトを直接インスタンス化することもできます。
静的メソッドを通じてレジストリ オブジェクトのインスタンスにアクセスすると、静的ストレージに便利で、プログラム内のどこからでもアクセスできます。
従来の新しい方法を使用してレジストリのインスタンスを作成する場合は、配列を使用してレジストリの内容を初期化できます。
例 4. レジストリ オブジェクトを作成する
リーリーこのオブジェクト インスタンスを作成した後、配列オブジェクト メソッドを使用してそれを使用することも、静的メソッド setInstance() を使用してこのオブジェクト インスタンスを静的オブジェクト インスタンスに設定することもできます。
例 5. 静的レジストリの初期化の例
リーリー静的レジストリ オブジェクトが初期化されている場合、setInstance() メソッドは Zend_Exception をスローします。
4. 配列のようにレジストリ オブジェクトにアクセスします
一度に複数の値にアクセスまたは設定したい場合は、配列メソッドを使用すると便利です。
例 6. 配列アクセスの例:
リーリー5. オブジェクトモードでレジストリにアクセスします
オブジェクト内のプロパティ名をインデックスとして使用し、オブジェクト指向スタイルを使用してレジストリ オブジェクトにアクセスすると便利であることがわかります。 これを行うには、ArrayObject::ARRAY_AS_PROPS オプションを使用してレジストリ オブジェクトを作成し、静的インスタンスを初期化する必要があります。これは、静的レジストリに初めてアクセスする前に行う必要があります。このオプションを使用する場合、PHP の一部のバージョンにはバグがあるため、このオプションには注意してください。
例 7. オブジェクト形式でのアクセス:
リーリー6. インデックスが存在するかどうかをクエリします
静的メソッド isRegistered() を使用して、特定のインデックスに対応する値セットがあるかどうかをクエリできます。
例 8. isRegistered() 例:
リーリー配列オブジェクト内の特定のインデックスの値が設定されているかどうかを確認するには、通常の配列で使用するのと同じように、 isset() 関数を使用できます。
例 9. isset() 例:
リーリー7. レジストリオブジェクトを拡張します
静的レジストリ オブジェクトは、Zend_Registry クラスのインスタンスです。機能を追加したい場合は、Zend_Registry クラスを継承し、このクラスを使用してオブジェクト レジストリにアクセスするように指定できます。静的メソッド setClassName() を使用して、使用するクラスを指定できます。このクラスは Zend_Registry のサブクラスである必要があることに注意してください。
例 10. 静的レジストリのクラス名を指定します:
リーリーレジストリにアクセスした後にクラス名を設定しようとすると、レジストリは例外をスローします。このクラス名をブーストラップ コード (つまり、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相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Zend Framework框架的PHP程序设计有所帮助。