Zend_Config-TheoryOfOperation.xml 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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>Aspect théorique</title>
  6. <para>
  7. Les données de configuration sont transmis au constructeur de
  8. <classname>Zend_Config</classname> sous la forme d'un tableau associatif, qui peut être
  9. multidimensionnel, afin de supporter une organisation des données du général vers le
  10. spécifique. Les classes d'adaptateur concrètes permettent de construire le tableau
  11. associatif pour le constructeur de <classname>Zend_Config</classname> à partir du système
  12. de stockage des données de configuration. Dans certaines utilisations spécifiques, les
  13. scripts de l'utilisateur peuvent fournir de tels tableaux directement
  14. au constructeur de <classname>Zend_Config</classname>, sans employer une classe
  15. d'adaptateur.
  16. </para>
  17. <para>
  18. Chaque valeur du tableau de données de configuration devient une propriété de l'objet
  19. <classname>Zend_Config</classname>. La clé est utilisée comme nom de propriété. Si une
  20. valeur est un tableau, alors la propriété d'objet résultante est créée comme un nouveau
  21. objet <classname>Zend_Config</classname>, chargé avec les données du tableau. Cela se
  22. déroule récursivement, tel qu'une hiérarchie de données de configuration peut être créée
  23. avec n'importe quel nombre de niveaux.
  24. </para>
  25. <para>
  26. <classname>Zend_Config</classname> implémente les interfaces <emphasis>Countable</emphasis>
  27. et <emphasis>Iterator</emphasis> afin de faciliter l'accès simple aux données de
  28. configuration. Ainsi, on peut employer la fonction
  29. <ulink url="http://fr.php.net/count"><methodname>count()</methodname></ulink>
  30. et des constructions de <acronym>PHP</acronym> telles que
  31. <ulink url="http://fr.php.net/foreach"><emphasis>foreach</emphasis></ulink> sur des objets
  32. <classname>Zend_Config</classname>.
  33. </para>
  34. <para>
  35. Par défaut, les données de configuration fournies par <classname>Zend_Config</classname> ne
  36. sont pas modifiables (lecture seule), et une affectation (par exemple,
  37. <command>$config->database->host = 'example.com';</command>) lèvera une exception. Ce
  38. comportement par défaut peut cependant être surchargé par le constructeur pour permettre la
  39. modification des valeurs de données. De plus, quand les modifications sont autorisées,
  40. <classname>Zend_Config</classname> supporte l'effacement de valeurs (c'est-à-dire
  41. <methodname>unset($config-&gt;database-&gt;host)</methodname>). La méthode
  42. <methodname>readOnly()</methodname> peut être utilisée pour déterminer si les modifications
  43. sont autorisés pour un objet <classname>Zend_Config</classname> donné et la méthode
  44. <methodname>setReadOnly()</methodname> peut être
  45. utilisée pour empêcher toute nouvelle modification d'un objet
  46. <classname>Zend_Config</classname> qui aurait été créé en autorisant le modifications.
  47. </para>
  48. <note>
  49. <para>
  50. Il est important de ne pas confondre des modifications en cours de script avec
  51. l'enregistrement des données de configuration dans le support de stockage
  52. spécifique. Les outils pour créer et modifier des données de configuration pour
  53. différents supports de stockage ne concernent pas
  54. <classname>Zend_Config</classname>. Des solutions tiers open-source sont facilement
  55. disponibles afin de créer et&#160;/&#160;ou de modifier les données de configuration
  56. pour différents supports de stockage.
  57. </para>
  58. </note>
  59. <para>
  60. Les classes d'adaptateur héritent de la classe de <classname>Zend_Config</classname> ce qui
  61. permet d'utiliser ses fonctionnalités.
  62. </para>
  63. <para>
  64. La famille des classes <classname>Zend_Config</classname> permet d'organiser les données de
  65. configuration en sections. Les classes d'adaptateur <classname>Zend_Config</classname>
  66. peuvent être chargées en spécifiant une section unique, des sections multiples, ou toutes
  67. les sections (si aucune n'est indiquée).
  68. </para>
  69. <para>
  70. Les classes d'adaptateurs <classname>Zend_Config</classname> supporte un modèle d'héritage
  71. simple qui permet à des données de configuration d'être héritées d'une section de données
  72. de configuration dans d'autres. Ceci afin de réduire ou d'éliminer le besoin de reproduire
  73. des données de configuration pour différents cas. Une section qui hérite peut également
  74. surchargée les valeurs dont elle hérite de sa section parente. Comme l'héritage des classes
  75. <acronym>PHP</acronym>, une section peut hériter d'une section parent, qui peut hériter
  76. d'une section grand-parent, et ainsi de suite, mais l'héritage multiple (c.-à-d., la
  77. section C héritant directement des sections parents A et B) n'est pas supporté.
  78. </para>
  79. <para>
  80. Si vous avez deux objets <classname>Zend_Config</classname>, vous pouvez les fusionner en
  81. un objet unique en utilisant la fonction <methodname>merge()</methodname>. Par exemple,
  82. prenons <varname>$config</varname> et <varname>$localConfig</varname>, vous pouvez fusionner
  83. <varname>$localConfig</varname> dans <varname>$config</varname> en utilisant
  84. <command>$config->merge($localConfig);</command>. Les éléments de
  85. <varname>$localConfig</varname> surchargeront les éléments nommés de la même manière dans
  86. <varname>$config</varname>.
  87. </para>
  88. <note>
  89. <para>
  90. L'objet <classname>Zend_Config</classname> qui réalise la fusion doit avoir été
  91. construit en autorisant les modifications, en fournissant <constant>TRUE</constant>
  92. en tant que second paramètre du constructeur. La méthode
  93. <methodname>setReadOnly()</methodname> peut être utilisée pour empêcher toute nouvelle
  94. modification après la fin de la fusion.
  95. </para>
  96. </note>
  97. </sect1>