1.9. Zend::initRegistry($registry = 'Zend_Registry')

Entwickler, welche die vorhandene Registry Funktionalität erweitern möchten, können diese Funktion verwenden. Diese Methode ermöglicht es dem Entwickler, für Zend_Registry eine Unterklasse zu erstellen, inklusive der Pseudonymmethode für offsetGet() und offsetExists() wie z.B. has(), getval(), setval(), etc., indem eine Instanz der Zend_Registry Unterklasse im Bootstrap Code erstellt und diese Instanz dann an initRegistry() übergeben wird, bevor irgend eine andere, der Registry zugehörige Methode verwendet wird. Man beachte, dass initRegistry() nur einmalig verwendet werden kann, um das versehentliche Überschreiben der Registry nach der Initialisierung zu verhindern. Auch die Verwendung von Zend::registry() oder Zend::register() ruft automatisch initRegistry() auf, wenn es vorher noch nicht aufgerufen worden ist.

Beispiel 1.5. register() / offsetSet() Beispiel

<?php
class Zend_RegistryMine extends Zend_Registry
{
    public function getval($index)
    {
        return $this->offsetGet($index);
    }
}

# Im Bootstrap Code:

$ini_array = parse_ini_file('your_stuff.ini'); // völlig optional
$registry = new Zend_RegistryMine($ini_array);
Zend::initRegistry($registry);

# nun arbeiten die normalen Zend::registry(), Zend::register() und Zend::isRegistered() wie erwartet
?>

Um zusätzlich zu $registry[$indexName] auf Werte auch über $registry->$indexName zugreifen zu können, verwendet man die Konstante ArrayObject::ARRAY_AS_PROPS im Konstruktor. Allerdings sollte man sich vor Namenskollisionen in Acht nehmen, wenn man Zend_Registry erweitert und private Variablen hinzufügt.

Beispiel 1.6. Auf Werte zugreifen über die OO Notation anstatt der ArrayAccess Notation

<?php
$registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS); 
Zend::initRegistry($registry);
?>