Theory of Operation

Konfigurations-Daten werden dem Zend_Config-Konstruktor als assoziatives Array zur Verfügung gestellt. Das Array kann mehrdimensional sein, um die Übergabe geordneter Daten zu unterstützen. Spezifische Adapter fungieren als Schnittstelle zwischen der Datenhaltung und dem Zend_Config-Konstruktor, indem sie die Daten für diesen als Array aufbereiten. Es können auch direkt aus dem eigenen Code Arrays an den Zend_Config-Konstruktor übergeben werden, ohne eine Adapter-Klasse zu benutzen. In manchen Situationen kann das angebracht sein.

Jeder Konfigurationswert des Arrays wird zu einer Eigenschaft des Zend_Config Objektes. Der Schlüssel wird als Name der Eigenschaft verwendet. Wenn ein Wert selbst ein Array ist, wird die resultierende Eigenschaft des Objektes selbst als ein neues Zend_Config Objekt erstellt und mit den Array Daten geladen. Das findet rekursiv statt, sodas hirarchische Konfigurationswerte mit einer beliebigen Anzahl an Level erstellt werden können.

Zend_Config implementiert die Interfaces Countable und Iterator um den einfachen Zugriff auf Konfigurationsdaten zu gewährleisten. Dementsprechend kann man die count()-Funktion und auch PHP Konstrukte wie foreach auf Zend_Config-Objekte anwenden.

Standardmäßig gewährt Zend_Config nur Lesezugriff auf die Daten und der Versuch einer Wertzuweisung (wie z. B. $config->database->host = 'example.com';) löst eine Ausnahme aus. Dieses Standard-Verhalten kann mit Hilfe des Konstruktors aber so überschrieben werden, dass die Veränderung von Daten erlaubt ist. Wenn auch Änderungen erlaubt sind, unterstützt Zend_Config das entfernen von Werten (z.B. unset($config->database->host)). Die readOnly() Methode kann verwendet werden um festzustellen ob Änderungen an einem gegebenen Zend_Config Objekt erlaubt sind und die setReadOnly() kann verwendet werden um weitere Änderungen an einem Zend_Config Objekt, das erstellt wurde und Änderungen erlaubt, zu verhindern.

Anmerkung

Es muss angemerkt werden, dass hierbei nur die Daten im Speicher verändert werden. Es wird keine Änderung an den Konfigurations-Daten auf dem Speichermedium vorgenommen. Werkzeuge zur Veränderung gespeicherter Konfigurations-Daten liegen nicht im Bereich von Zend_Config. Drittanbieter bieten bereits diverse Open-Source-Lösungen für das Erstellen und Verändern von Konfigurations-Datensätzen in verschienen Formaten.

Adapter-Klassen erben von der Zend_Config-Klasse, da sie ihre Funktionalität nutzen.

Die Familie der Zend_Config-Klassen ermöglicht es, Daten in Sektionen einzuteilen. Beim Initialisieren eines Zend_Config-Adapter-Objektes können eine einzelne spezifizierte Sektion, mehrere spezifizierte Sektionen oder alle Sektionen (wenn keine spezifiziert ist) geladen werden.

Die Zend_Config-Adapter-Klassen unterstützen ein Modell einfacher Vererbung, welches es ermöglicht, dass Konfigurations-Daten aus einer Sektion an eine Andere vererbt werden können. Dadurch kann die Notwendigeit doppelter Konfigurations-Daten für verschiedene Einsatzgebiete reduziert oder beseitigt werden. Eine erbende Sektion kann die von der Eltern-Sektion geerbten Werte auch überschreiben. Wie auch bei der Klassen-Vererbung in PHP kann eine Sektion von einer Eltern-Sektion geerbt werden, die wiederum von einer Großeltern-Sektion geerbt hat und so weiter. Mehrfaches Erben (Beispielsweise der Fall, dass Sektion C direkt von den Eltern-Sektionen A und B erbt) wird dagegen nicht unterstützt.

Wenn zwei Zend_Config Objekte vorhanden sind, können diese in ein einzelnes Objekt zusammengeführt werden indem die merge() Funktion verwendet wird. Angenommen es gibt $config und $localConfig, kann $localConfig in $config zusammengeführt werden indem $config->merge($localConfig); aufgerufen wird. Die Elemente in $localConfig überschreiben gleichnamige Elemente in $config.

Anmerkung

Das Zend_Config Objekt das die Zusammenführung durchführt muß so erstellt worden sein das es Änderungen erlaubt, indem dem Constructor TRUE als zweiter Parameter übergeben wird. Die setReadOnly() Methode kann dann verwendet werden um weitere Änderungen zu verhindern nachdem die Zusammenführung fertiggestellt ist.