Das Beispiel in diesem Artikel beschreibt die Verwendung des Zend_Registry-Objekts im Zend Framework-Tutorial. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Verwenden der Objektregistrierung (Registrierung)
Die Objektregistrierung (oder das Objektlager) ist ein Objekt, das im gesamten Anwendungsbereich verwendet wird . Ein Container zum Speichern von Objekten und Werten. Indem wir Objekte darin speichern, können wir dasselbe Objekt überall im Projekt verwenden. Dieser Mechanismus entspricht einem globalen Speicher.
Wir können die Objektregistrierung über die statischen Methoden der Zend_Registry-Klasse verwenden. Da es sich bei dieser Klasse außerdem um ein Array-Objekt handelt, können Sie die Array-Form verwenden, um auf die Klassenmethoden zuzugreifen.
1. Legen Sie den Wert in der Registrierung fest
Um einen Inhalt in der Registrierung zu speichern, können wir die statische Methode set() verwenden.
Beispiel 1. Beispiel für die Verwendung von set():
Zend_Registry::set('index', $value);
$value kann ein Objekt, ein Array oder ein Skalar sein. Sie können set() erneut verwenden, um einen neuen Wert auf einen bereits in der Registrierung vorhandenen Wert zu setzen.
Der Indexparameter kann ein Skalar, eine Zeichenfolge oder eine Ganzzahl sein, genau wie bei der Verwendung eines Arrays, ähnlich dem Index-/Schlüsselnamen des Arrays.
2. Den Wert in der Registrierung abrufen
Sie können die Methode get() verwenden, um den Wert eines Elements in der Registrierung abzurufen.
Beispiel 2. Beispiel für die get()-Methode:
$value = Zend_Registry::get('index');
getInstance() gibt ein statisches Registrierungsobjekt zurück.
Registrierungsobjekte sind iterierbar.
Beispiel 3. Iterieren Sie ein Registrierungsobjekt:
$registry = Zend_Registry::getInstance(); foreach ($registry as $index => $value) { echo "Registry index $index contains:/n"; var_dump($value); }
3. Erstellen Sie ein Registrierungsobjekt
Zusätzlich zu Verwenden von Zusätzlich zu statischen Methoden für den Zugriff auf das Registrierungsobjekt können Sie es direkt instanziieren, genau wie bei der Verwendung eines normalen Objekts.
Wenn Sie über eine statische Methode auf eine Instanz eines Registrierungsobjekts zugreifen, eignet sich dies für die statische Speicherung und Sie können überall im Programm darauf zugreifen.
Wenn Sie die traditionelle neue Methode zum Erstellen einer Instanz der Registrierung verwenden, können Sie ein Array verwenden, um den Inhalt der Registrierung zu initialisieren.
Beispiel 4. Erstellen Sie ein Registrierungsobjekt
$registry = new Zend_Registry(array('index' => $value));
Nachdem Sie diese Objektinstanz erstellt haben, können Sie sie mit der Array-Objektmethode verwenden , oder Sie können diese Objektinstanz über die statische Methode setInstance() auf eine statische Objektinstanz festlegen.
Beispiel 5. Beispiel für die Initialisierung der statischen Registrierung
$registry = new Zend_Registry(array('index' => $value)); Zend_Registry::setInstance($registry);
Wenn das statische Registrierungsobjekt initialisiert wurde, wird die Methode setInstance( ) initialisiert eine Zend_Exception-Ausnahme auslösen.
4. Greifen Sie wie ein Array auf das Registrierungsobjekt zu.
Wenn Sie auf mehrere Werte gleichzeitig zugreifen oder diese festlegen möchten, ist die Verwendung der Array-Methode sehr praktisch.
Beispiel 6. Beispiel für den Array-Methodenzugriff:
$registry = Zend_Registry::getInstance(); $registry['index'] = $value; var_dump( $registry['index'] );
5. Objektmethodenzugriffsregistrierung
Sie finden Es ist auch praktisch, über einen objektorientierten Stil auf Registrierungsobjekte zuzugreifen, indem die Eigenschaftsnamen in den Objekten als Indizes verwendet werden. Dazu müssen Sie das Registrierungsobjekt mit der Option ArrayObject::ARRAY_AS_PROPS erstellen und die statische Instanz initialisieren. Sie müssen dies tun, bevor zum ersten Mal auf die statische Registrierung zugegriffen wird. Seien Sie vorsichtig mit dieser Option, da einige PHP-Versionen bei der Verwendung dieser Option Fehler aufweisen.
Beispiel 7. Zugriff in Objektform:
//在你的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. Abfrage, ob ein Index vorhanden ist
Verwendet Die statische Methode isRegistered() fragt ab, ob für einen bestimmten Index ein entsprechender Wertesatz vorhanden ist.
Beispiel 8. isRegistered() Beispiel:
if (Zend_Registry::isRegistered($index)) { $value = Zend_Registry::get($index); }
Um zu bestimmen, ob der Wert eines bestimmten Index in einem Array-Objekt festgelegt ist Definiert können Sie die Funktion isset() wie ein gewöhnliches Array verwenden.
Beispiel 9. isset() Beispiel:
$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. Das statische Registrierungsobjekt ist eine Instanz der Klasse Zend_Registry. Wenn Sie Funktionalität hinzufügen möchten, können Sie die Zend_Registry-Klasse erben und dann angeben, dass diese Klasse für den Zugriff auf die Objektregistrierung verwendet werden soll. Sie können die statische Methode setClassName() verwenden, um die zu verwendende Klasse anzugeben. Beachten Sie, dass diese Klasse eine Unterklasse von Zend_Registry sein muss.
Beispiel 10. Geben Sie den Klassennamen der statischen Registrierung an:
Zend_Registry::setClassName('My_Registry'); Zend_Registry::set('index', $value);
Wenn Sie versuchen, dies festzulegen, nachdem die Registrierung erstellt wurde Wenn auf den Klassennamen zugegriffen wird, löst die Registrierung eine Ausnahme aus. Es wird empfohlen, diesen Klassennamen im Boostrap-Code festzulegen (z. B. index.php).
8. Löschen Sie die statische Registrierung
Obwohl dies nicht erforderlich ist, können Sie die statische Instanz der Registrierung mit der Methode _unsetInstance() löschen.
[Hinweis] Risiko eines Datenverlusts
Bei Verwendung von _unsetInstance() gehen alle Daten in der statischen Registrierung verloren und können nicht wiederhergestellt werden.
Manchmal benötigen Sie möglicherweise die Methode _unsetInstance(). Wenn Sie beispielsweise setInstance() oder setClassName() verwenden möchten, nachdem das Registrierungsobjekt initialisiert wurde, können Sie _unsetInstance() verwenden, um die statische Instanz zu löschen, bevor Sie diese Methoden verwenden.
Beispiel 11. _unsetInstance() Beispiel:
hat geholfen.Zend_Registry::set('index', $value); Zend_Registry::_unsetInstance(); // 改变我们要使用的类 Zend_Registry::setClassName('My_Registry'); Zend_Registry::set('index', $value);
Weitere Artikel zum Zend Framework-Tutorial zur Zend_Registry-Objektnutzungsanalyse finden Sie auf der chinesischen PHP-Website!