| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15103 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.config.theory_of_operation">
- <title>Theory of Operation</title>
- <para>
- Konfigurations-Daten werden dem <classname>Zend_Config</classname>-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 <classname>Zend_Config</classname>-Konstruktor,
- indem sie die Daten für diesen als Array aufbereiten. Es können auch direkt aus dem eigenen Code Arrays an
- den <classname>Zend_Config</classname>-Konstruktor übergeben werden, ohne eine Adapter-Klasse zu benutzen. In manchen
- Situationen kann das angebracht sein.
- </para>
- <para>
- Jeder Konfigurationswert des Arrays wird zu einer Eigenschaft des <classname>Zend_Config</classname> 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 <classname>Zend_Config</classname> 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.
- </para>
- <para>
- <classname>Zend_Config</classname> implementiert die Interfaces <code>Countable</code> und <code>Iterator</code>
- um den einfachen Zugriff auf Konfigurationsdaten zu gewährleisten. Dementsprechend kann man die
- <ulink url="http://php.net/count"><code>count()</code></ulink>-Funktion und auch PHP-Konstrukte wie
- <ulink url="http://php.net/foreach"><code>foreach</code></ulink> auf <classname>Zend_Config</classname>-Objekte
- anwenden.
- </para>
- <para>
- Standardmäßig gewährt <classname>Zend_Config</classname> nur Lesezugriff auf die Daten und der Versuch einer
- Wertzuweisung (wie z. B. <code>$config->database->host = 'example.com';</code>) 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
- <classname>Zend_Config</classname> das entfernen von Werten (z.B.
- <code>unset($config->database->host);</code>). Die <code>readOnly()</code> Methode kann verwendet werden
- um festzustellen ob Änderungen an einem gegebenen <classname>Zend_Config</classname> Objekt erlaubt sind und die
- <code>setReadOnly()</code> kann verwendet werden um weitere Änderungen an einem <classname>Zend_Config</classname>
- Objekt, das erstellt wurde und Änderungen erlaubt, zu verhindern.
- <note>
- <para>
- 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 <classname>Zend_Config</classname>.
- Drittanbieter bieten bereits diverse Open-Source-Lösungen für das Erstellen und Verändern von
- Konfigurations-Datensätzen in verschienen Formaten.
- </para>
- </note>
- </para>
- <para>
- Adapter-Klassen erben von der <classname>Zend_Config</classname>-Klasse, da sie ihre Funktionalität nutzen.
- </para>
- <para>
- Die Familie der <classname>Zend_Config</classname>-Klassen ermöglicht es, Daten in Sektionen einzuteilen.
- Beim Initialisieren eines <classname>Zend_Config</classname>-Adapter-Objektes können eine einzelne spezifizierte
- Sektion, mehrere spezifizierte Sektionen oder alle Sektionen (wenn keine spezifiziert ist) geladen werden.
- </para>
- <para>
- Die <classname>Zend_Config</classname>-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.
- </para>
- <para>
- Wenn zwei <classname>Zend_Config</classname> Objekte vorhanden sind, können diese in ein einzelnes Objekt
- zusammengeführt werden indem die <code>merge()</code> Funktion verwendet wird. Angenommen es gibt
- <code>$config</code> und <code>$localConfig</code>, kann <code>$localConfig</code> in <code>$config</code>
- zusammengeführt werden indem <code>$config->merge($localConfig);</code> aufgerufen wird.
- Die Elemente in <code>$localConfig</code> überschreiben gleichnamige Elemente in <code>$config</code>.
- <note>
- <para>
- Das <classname>Zend_Config</classname> Objekt das die Zusammenführung durchführt muß so erstellt worden
- sein das es Änderungen erlaubt, indem dem Constructor <code>true</code> als zweiter
- Parameter übergeben wird. Die <code>setReadOnly()</code> Methode kann dann verwendet werden
- um weitere Änderungen zu verhindern nachdem die Zusammenführung fertiggestellt ist.
- </para>
- </note>
- </para>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|