| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- 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
- <emphasis>Countable</emphasis> und <emphasis>Iterator</emphasis> um den einfachen Zugriff
- auf Konfigurationsdaten zu gewährleisten. Dementsprechend kann man die <ulink
- url="http://php.net/count"><methodname>count()</methodname></ulink>-Funktion und auch
- <acronym>PHP</acronym> Konstrukte wie <ulink
- url="http://php.net/foreach"><emphasis>foreach</emphasis></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.
- <command>$config->database->host = 'example.com';</command>) 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.
- <methodname>unset($config->database->host)</methodname>). Die
- <methodname>readOnly()</methodname> Methode kann verwendet werden um festzustellen ob
- Änderungen an einem gegebenen <classname>Zend_Config</classname> Objekt erlaubt sind und
- die <methodname>setReadOnly()</methodname> kann verwendet werden um weitere Änderungen an
- einem <classname>Zend_Config</classname> Objekt, das erstellt wurde und Änderungen erlaubt,
- zu verhindern.
- </para>
- <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>
- 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 <acronym>PHP</acronym> 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 <methodname>merge()</methodname> Funktion
- verwendet wird. Angenommen es gibt <varname>$config</varname> und
- <varname>$localConfig</varname>, kann <varname>$localConfig</varname> in
- <varname>$config</varname> zusammengeführt werden indem
- <command>$config->merge($localConfig);</command> aufgerufen wird. Die Elemente in
- <varname>$localConfig</varname> überschreiben gleichnamige Elemente in
- <varname>$config</varname>.
- </para>
- <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
- <constant>TRUE</constant> als zweiter Parameter übergeben wird. Die
- <methodname>setReadOnly()</methodname> Methode kann dann verwendet werden um
- weitere Änderungen zu verhindern nachdem die Zusammenführung fertiggestellt ist.
- </para>
- </note>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|