Zend_Config-TheoryOfOperation.xml 6.0 KB

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