Zend_Config-TheoryOfOperation.xml 5.9 KB

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