Zend_Config-TheoryOfOperation.xml 6.0 KB

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