Kapitel 25. Zend_Registry

Inhaltsverzeichnis

25.1. Die Registry verwenden
25.1.1. Werte in die Registry speichern
25.1.2. Werte aus der Registry lesen
25.1.3. Erstellen eines Registry Objektes
25.1.4. Auf die Registry als Array zugreifen
25.1.5. Zugriff auf die Registry als Objekt
25.1.6. Abfragen ob ein Index existiert
25.1.7. Erweitern der Registry
25.1.8. Entfernen der statischen Registry

25.1. Die Registry verwenden

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.

25.1.1. Werte in die Registry speichern

Um einen Eintrag in die Registry zu Speichern kann die statische Methode set() verwendet werden.

Beispiel 25.1. Beispiel der set() Methode

<?php

Zend_Registry::set('index', $value);

?>

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.

25.1.2. Werte aus der Registry lesen

Um einen Eintrag von der Registry zu erhalten, kann die statische Methode get() verwendet werden.

Beispiel 25.2. Beispiel der get() Methode

<?php

$value = Zend_Registry::get('index');

?>

Die getInstance() Methode gibt ein statisches Registry Objekt zurück.

Das Registry Objekt ist durchsuchbar.

Beispiel 25.3. Beispiel des Durchsuchens der Registry

<?php

$registry = Zend_Registry::getInstance();

foreach ($registry as $index => $value) {
    echo "Registry Index $index enthält:\n";
    var_dump($value);
}

?>

25.1.3. Erstellen eines Registry Objektes

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.

25.1.4. Auf die Registry als Array zugreifen

Wenn mehrere Werte gesetzt oder gelesen werden sollen, kann es einfacher sein auf die Registry in Array Schreibweise zuzugreifen.

Beispiel 25.6. Beispiel eines Array-zugriffs

<?php

$registry = Zend_Registry::getInstance();

$registry['index'] = $value;

var_dump( $registry['index'] );

?>

25.1.5. Zugriff auf die Registry als Objekt

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);

?>

25.1.6. Abfragen ob ein Index existiert

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 );
}

?>

25.1.7. Erweitern der Registry

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.

25.1.8. Entfernen der statischen Registry

Obwohl es normalerweise nicht notwendig ist, kann die statische Instanz der Registry entfernt werden. Hierfür kann die statische Methode _unsetInstance() verwendet werden.

[Anmerkung] Risiko des Datenverlustes

Wenn _unsetInstance() verwendet wird, werden alle Daten in der statischen Registry verworfen und können nicht wiederhergestellt werden.

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.

Beispiel 25.11. Beispiel der _unsetInstance() Methode

<?php

Zend_Registry::set('index', $value);

Zend_Registry::_unsetInstance();

// Ändern der Klasse
Zend_Registry::setClassName('Meine_Registry');

Zend_Registry::set('index', $value);

?>