Inhaltsverzeichnis
Die Registry ist ein Container für das Speichern von Objekten und Werten im Raum der Anwendung. Durch das Speichern der Werte in der Registry steht das selbe Objekt immer innerhalb der kompletten Anwendung zur Verfügung. Dieser Mechanismus ist eine Alernative zur Verwendung eines Globalen Speichers.
Typischerweise wird die Registry durch Ihre statischen Methoden in der Zend_Registry Klasse benutzt. Alternativ, ist die Klasse ein Array Objekt und so können Elemente welche darin gespeichert wurden durch ein gewöhnliches Array-artiges Interface verwendet werden.
Um einen Eintrag in die Registry zu Speichern kann die statische Methode
set()
verwendet werden.
Der Wert kann ein Objekt, ein Array oder ein Skalar sein.
Der gespeicherte Wert in einem speziellen Eintrag der Registry
kann durch set()
verändert und mit einem neuen Wert
überschrieben werden.
Der Index kann ein Skalar, entweder eine Zeichenkette oder ein Integer, sowie ein gewöhnliches Array sein.
Um einen Eintrag von der Registry zu erhalten, kann die statische Methode
get()
verwendet werden.
Die getInstance()
Methode gibt ein statisches Registry Objekt zurück.
Das Registry Objekt ist durchsuchbar.
Zusätzlich zur Verwendung der statischen Registry durch die statischen Methoden, kann eine Instanz direkt erzeugt werden und als Objekt verwendet werden.
Die Registry Instanz die durch die statischen Methoden verwendet wird, ist einfach eine solche Instanz welche als Vereinfachung statisch gespeichert ist damit Sie von überall innerhalb der Anwendung verwendet werden kann.
Der traditionelle new
Constructor kann verwendet werden um
eine Instanz der Registry zu erstellen. Das eröffnet die Möglichkeit
die Einträge in der Registry als assoziatives Array zu initialisieren.
Beispiel 25.4. Beispiel für das Erstellen einer Registry
<?php $registry = new Zend_Registry(array('index' => $value)); ?>
Nach der Erstellung dieser Instanz kann Sie mit Array-Objekt Methoden
verwendet werden und diese Instanz kann die statische Instanz werden durch
Verwendung der Statischen Methode setInstance()
.
Beispiel 25.5. Beispiel der Initialisierung der statischen Registry
<?php $registry = new Zend_Registry(array('index' => $value)); Zend_Registry::setInstance($registry); ?>
Die setInstance()
Methode wirft eine Zend_Exception wenn die
statische Registry bereits durch den ersten Zugriff initialisiert wurde.
Wenn mehrere Werte gesetzt oder gelesen werden sollen, kann es einfacher sein auf die Registry in Array Schreibweise zuzugreifen.
Manchmal ist es einfacher auf die Registry in einer Objekt-Orientierten
Art und Weise zuzugreifen, durch Verwendung von Indexnamen als Objekt Eigenschaften.
Um das zu tun, muß das Registry Objekt mit der
ArrayObject::ARRAY_AS_PROPS
Option erstellt und die
statische Instanz initialisiert werden. Das muß getan werden bevor auf die
statische Registry das erste Mal zugegriffen wird.
Achtung bei Verwendung dieser Option.
Einige Versionen von PHP haben Fehler wenn die Registry mit dieser Option
benutzt wird.
Beispiel 25.7. Beispiel eines Objektzugriffs
<?php // In der Anwendungs Bootstrap Datei: $registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS) Zend_Registry::setInstance($registry); $registry->tree = 'Apfel'; . . . // In einer anderen Funktion, irgendwo in der Anwendung: $registry = Zend_Registry::getInstance(); echo $registry->tree; // Gibt "Apfel" aus $registry->index = $value; var_dump($registry->index); ?>
Um herauszufinden ob ein bestimmter Index in der Registry einen Wert hat,
kann die statische Methode isRegistered()
verwendet werden.
Beispiel 25.8. Beispiel der isRegistered() Methode
<?php if (Zend_Registry::isRegistered($index)) { $value = Zend_Registry::get($index); } ?>
Um herauszufinden ob ein bestimmter Index in einem Registry Array Objekt
einen Wert hat kann isset()
verwendet werden, wie bei einem
gewöhnlichen Array.
Beispiel 25.9. Beispiel der isset() Methode
<?php $registry = Zend_Registry::getInstance(); // Verwendung des Array-Zugriffs Syntax if (isset($registry['index'])) { var_dump( $registry['index'] ); } // Verwendung des Objekt-Zugriffs Syntax, wenn aktiviert if (isset($registry->index)) { var_dump( $registry->index ); } ?>
Die statische Registry ist eine Instanz der Klasse Zend_Registry.
Wenn Funktionalität zur Registry hinzugefügt werden soll, kann eine
Klasse erstellt werden die Zend_Registry erweitert und dann kann diese
spezielle Klasse definiert werden die für die statische Registry verwendet
wird. Die statische Methode setClassName()
kann verwendet
werden um die Klasse zu definieren. Diese Klasse muß Zend_Registry erweitern.
Beispiel 25.10. Beispiel des Definierens des statischen Registry Klassennamens
<?php Zend_Registry::setClassName('Meine_Registry'); Zend_Registry::set('index', $value); ?>
Die Registry wirft eine Zend_Exception wenn man versucht den Klassennamen zu setzen nachdem die Registry das erste Mal verwendet wurde. Es ist notwendig den Klassennamen für die statische Registry in der Bootstrap Datei der Anwendung zu definieren.
Obwohl es normalerweise nicht notwendig ist, kann die statische Instanz
der Registry entfernt werden. Hierfür kann die statische Methode
_unsetInstance()
verwendet werden.
Risiko des Datenverlustes | |
---|---|
Wenn |
Diese Methode kann zum Beispiel verwendet werden, wenn
setInstance()
oder setClassName()
nach der
Initialisierung des statischen Registry Objektes verwendet werden soll.
Entfernen der statischen Instanz erlaubt die Benutzung dieser Methoden.