Zend_Config-TheoryOfOperation.xml 5.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15103 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.config.theory_of_operation">
  5. <title>Theory of Operation</title>
  6. <para>
  7. Konfigurations-Daten werden dem <classname>Zend_Config</classname>-Konstruktor als assoziatives Array zur Verfügung
  8. gestellt. Das Array kann mehrdimensional sein, um die Übergabe geordneter Daten zu unterstützen. Spezifische
  9. Adapter fungieren als Schnittstelle zwischen der Datenhaltung und dem <classname>Zend_Config</classname>-Konstruktor,
  10. indem sie die Daten für diesen als Array aufbereiten. Es können auch direkt aus dem eigenen Code Arrays an
  11. den <classname>Zend_Config</classname>-Konstruktor übergeben werden, ohne eine Adapter-Klasse zu benutzen. In manchen
  12. Situationen kann das angebracht sein.
  13. </para>
  14. <para>
  15. Jeder Konfigurationswert des Arrays wird zu einer Eigenschaft des <classname>Zend_Config</classname> Objektes.
  16. Der Schlüssel wird als Name der Eigenschaft verwendet. Wenn ein Wert selbst ein Array ist, wird die
  17. resultierende Eigenschaft des Objektes selbst als ein neues <classname>Zend_Config</classname> Objekt erstellt und
  18. mit den Array Daten geladen. Das findet rekursiv statt, sodas hirarchische Konfigurationswerte mit einer
  19. beliebigen Anzahl an Level erstellt werden können.
  20. </para>
  21. <para>
  22. <classname>Zend_Config</classname> implementiert die Interfaces <code>Countable</code> und <code>Iterator</code>
  23. um den einfachen Zugriff auf Konfigurationsdaten zu gewährleisten. Dementsprechend kann man die
  24. <ulink url="http://php.net/count"><code>count()</code></ulink>-Funktion und auch PHP-Konstrukte wie
  25. <ulink url="http://php.net/foreach"><code>foreach</code></ulink> auf <classname>Zend_Config</classname>-Objekte
  26. anwenden.
  27. </para>
  28. <para>
  29. Standardmäßig gewährt <classname>Zend_Config</classname> nur Lesezugriff auf die Daten und der Versuch einer
  30. Wertzuweisung (wie z. B. <code>$config->database->host = 'example.com';</code>) löst eine
  31. Ausnahme aus. Dieses Standard-Verhalten kann mit Hilfe des Konstruktors aber so überschrieben werden,
  32. dass die Veränderung von Daten erlaubt ist. Wenn auch Änderungen erlaubt sind, unterstützt
  33. <classname>Zend_Config</classname> das entfernen von Werten (z.B.
  34. <code>unset($config->database->host);</code>). Die <code>readOnly()</code> Methode kann verwendet werden
  35. um festzustellen ob Änderungen an einem gegebenen <classname>Zend_Config</classname> Objekt erlaubt sind und die
  36. <code>setReadOnly()</code> kann verwendet werden um weitere Änderungen an einem <classname>Zend_Config</classname>
  37. Objekt, das erstellt wurde und Änderungen erlaubt, zu verhindern.
  38. <note>
  39. <para>
  40. Es muss angemerkt werden, dass hierbei nur die Daten im Speicher verändert werden. Es wird keine
  41. Änderung an den Konfigurations-Daten auf dem Speichermedium vorgenommen. Werkzeuge zur Veränderung
  42. gespeicherter Konfigurations-Daten liegen nicht im Bereich von <classname>Zend_Config</classname>.
  43. Drittanbieter bieten bereits diverse Open-Source-Lösungen für das Erstellen und Verändern von
  44. Konfigurations-Datensätzen in verschienen Formaten.
  45. </para>
  46. </note>
  47. </para>
  48. <para>
  49. Adapter-Klassen erben von der <classname>Zend_Config</classname>-Klasse, da sie ihre Funktionalität nutzen.
  50. </para>
  51. <para>
  52. Die Familie der <classname>Zend_Config</classname>-Klassen ermöglicht es, Daten in Sektionen einzuteilen.
  53. Beim Initialisieren eines <classname>Zend_Config</classname>-Adapter-Objektes können eine einzelne spezifizierte
  54. Sektion, mehrere spezifizierte Sektionen oder alle Sektionen (wenn keine spezifiziert ist) geladen werden.
  55. </para>
  56. <para>
  57. Die <classname>Zend_Config</classname>-Adapter-Klassen unterstützen ein Modell einfacher Vererbung, welches es
  58. ermöglicht, dass Konfigurations-Daten aus einer Sektion an eine Andere vererbt werden können. Dadurch
  59. kann die Notwendigeit doppelter Konfigurations-Daten für verschiedene Einsatzgebiete reduziert oder
  60. beseitigt werden. Eine erbende Sektion kann die von der Eltern-Sektion geerbten Werte auch überschreiben.
  61. Wie auch bei der Klassen-Vererbung in PHP kann eine Sektion von einer Eltern-Sektion geerbt werden, die
  62. wiederum von einer Großeltern-Sektion geerbt hat und so weiter. Mehrfaches Erben (Beispielsweise der Fall,
  63. dass Sektion C direkt von den Eltern-Sektionen A und B erbt) wird dagegen nicht unterstützt.
  64. </para>
  65. <para>
  66. Wenn zwei <classname>Zend_Config</classname> Objekte vorhanden sind, können diese in ein einzelnes Objekt
  67. zusammengeführt werden indem die <code>merge()</code> Funktion verwendet wird. Angenommen es gibt
  68. <code>$config</code> und <code>$localConfig</code>, kann <code>$localConfig</code> in <code>$config</code>
  69. zusammengeführt werden indem <code>$config->merge($localConfig);</code> aufgerufen wird.
  70. Die Elemente in <code>$localConfig</code> überschreiben gleichnamige Elemente in <code>$config</code>.
  71. <note>
  72. <para>
  73. Das <classname>Zend_Config</classname> Objekt das die Zusammenführung durchführt muß so erstellt worden
  74. sein das es Änderungen erlaubt, indem dem Constructor <code>true</code> als zweiter
  75. Parameter übergeben wird. Die <code>setReadOnly()</code> Methode kann dann verwendet werden
  76. um weitere Änderungen zu verhindern nachdem die Zusammenführung fertiggestellt ist.
  77. </para>
  78. </note>
  79. </para>
  80. </sect1>
  81. <!--
  82. vim:se ts=4 sw=4 et:
  83. -->