Programmer's Reference Guide

Zend_Registry

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.

Werte in die Registry speichern

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

Beispiel #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.

Werte aus der Registry lesen

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

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

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 #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 #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.

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 #6 Beispiel eines Array-zugriffs

<?php
$registry = Zend_Registry::getInstance();

$registry['index'] = $value;

var_dump( $registry['index'] );
            

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

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

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 #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.

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.

Hinweis: 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 #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);
            

Zend_Registry
blog comments powered by Disqus

Select a Version

Languages Available

Components

Search the Manual