Zend_Config-TheoryOfOperation.xml 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 16674 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.config.theory_of_operation">
  5. <title>Aspectos Teóricos</title>
  6. <para>
  7. Los datos de configuración se hacen accesibles al constructor
  8. <classname>Zend_Config</classname>
  9. a través de
  10. un array asociativo, que puede ser multidimensional, para permitir organizar los
  11. datos desde lo general a lo
  12. específico. Las clases de adaptador concretas permiten construir
  13. una tabla asociativa para el constructor de
  14. <classname>Zend_Config</classname>
  15. a partir de un sistema de almacenamiento de datos de configuración.
  16. Algunos scripts de
  17. usuario pueden proveer esos arrays directamente al constructor Zend_Config, sin usar una
  18. clase adaptador, lo cual puede ser apropiado en ciertas ocasiones.
  19. </para>
  20. <para>
  21. Cada valor del array de datos de configuración se convierte en una propiedad del objeto
  22. <classname>Zend_Config</classname>
  23. . La clave es usada como el nombre de la propiedad. Si un valor es un
  24. array por sí solo,
  25. entonces la propiedad de objeto resultante es creada como un nuevo objeto
  26. <classname>Zend_Config</classname>
  27. , cargado con los datos del array. Esto ocurre recursivamente, de forma
  28. que una jerarquía de
  29. datos de configuración puede ser creada con cualquier número de niveles.
  30. </para>
  31. <para>
  32. <classname>Zend_Config</classname>
  33. implementa las interfaces
  34. <emphasis>Countable</emphasis>
  35. e
  36. <emphasis>Iterator</emphasis>
  37. para facilitar el aceso sencillo a los datos de configuración. Así, uno
  38. puede usar la función
  39. <ulink url="http://php.net/count">
  40. <methodname>count()</methodname>
  41. </ulink>
  42. y constructores
  43. <acronym>PHP</acronym>
  44. como
  45. <ulink url="http://php.net/foreach">
  46. <emphasis>foreach</emphasis>
  47. </ulink>
  48. sobre objetos
  49. <classname>Zend_Config</classname>
  50. .
  51. </para>
  52. <para>
  53. Por defecto, los datos de configuración permitidos a través de
  54. <classname>Zend_Config</classname>
  55. son de sólo
  56. lectura, y una asignación (e.g.,
  57. <methodname>$config-&gt;database-&gt;host = 'example.com'</methodname>
  58. )
  59. provoca que se lance una excepción. Este comportamiento por defecto puede ser sobrescrito a
  60. través del
  61. constructor, sin embargo, para permitir la modificación de valores de datos.
  62. Además, cuando las modificaciones
  63. están permitidas,
  64. <classname>Zend_Config</classname>
  65. soporta el borrado de elementos (unset) (i.e.
  66. <methodname>unset($config-&gt;database-&gt;host);</methodname>
  67. ). El método
  68. <methodname>readOnly()</methodname>
  69. puede ser usado para determinar si las modificaciones a un objeto
  70. <classname>Zend_Config</classname>
  71. están permitidas y el método
  72. <methodname>setReadOnly()</methodname>
  73. puede
  74. ser usado para evitar cualquier modificación posterior a un objeto
  75. <classname>Zend_Config</classname>
  76. que fue
  77. creado con permiso de modificaciones.
  78. <note>
  79. <para>
  80. Es importante no confundir tales modificaciones en memoria con guardar los datos de
  81. configuración a
  82. un medio de almacenamiento específico. Las herramientas para crear y
  83. modificar datos de configuración
  84. para distintos medios de almacenamiento están fuera
  85. del alcance de
  86. <classname>Zend_Config</classname>
  87. .
  88. Existen soluciones third-party de código abierto con el propósito de crear y
  89. modificar datos de
  90. configuración de distintos medios de almacenamiento.
  91. </para>
  92. </note>
  93. </para>
  94. <para>
  95. Las clases del adaptador heredan de la clase
  96. <classname>Zend_Config</classname>
  97. debido a que utilizan su
  98. funcionalidad.
  99. </para>
  100. <para>
  101. La familia de clases
  102. <classname>Zend_Config</classname>
  103. permite organizar en secciones los datos de
  104. configuración. Los objetos de adaptador
  105. <classname>Zend_Config</classname>
  106. pueden ser cargados con una sola
  107. sección especificada, múltiples secciones especificadas, o
  108. todas las secciones (si no se especifica ninguna).
  109. </para>
  110. <para>
  111. Las clases del adaptador
  112. <classname>Zend_Config</classname>
  113. soportan un modelo de herencia única que permite
  114. que los datos de configuración hereden de
  115. una sección de datos de configuración a otra. Esto es provisto con el
  116. fin de reducir o
  117. eliminar la necesidad de duplicar datos de configuración por distintos motivos. Una sección
  118. heredada puede también sobrescribir los valores que hereda de su sección padre. Al igual que
  119. la herencia de
  120. clases
  121. <acronym>PHP</acronym>
  122. , una sección puede heredar de una sección padre, la cual puede heredar de una
  123. sección
  124. abuela, etc..., pero la herencia múltiple (i.e., la sección C heredando directamente de las
  125. secciones
  126. padre A y B) no está permitida.
  127. </para>
  128. <para>
  129. Si tiene dos objetos
  130. <classname>Zend_Config</classname>
  131. , puede combinarlos en un único objeto usando la
  132. función
  133. <methodname>merge()</methodname>
  134. . Por ejemplo, dados
  135. <varname>$config</varname>
  136. y
  137. <varname>$localConfig</varname>
  138. , puede fusionar datos de
  139. <varname>$localConfig</varname>
  140. a
  141. <varname>$config</varname>
  142. usando
  143. <methodname>$config-&gt;merge($localConfig);</methodname>
  144. . Los
  145. ítemes en
  146. <varname>$localConfig</varname>
  147. sobrescribirán cualquier item con el mismo nombre en
  148. <varname>$config</varname>
  149. .
  150. <note>
  151. <para>
  152. El objeto
  153. <classname>Zend_Config</classname>
  154. que está ejecutando el merge debe haber sido construido
  155. para permitir modificaciones,
  156. pasando
  157. <constant>TRUE</constant>
  158. como el segundo parámetro del
  159. constructor. El método
  160. <methodname>setReadOnly()</methodname>
  161. puede entonces ser usado para evitar
  162. cualquier modificación posterior después de que
  163. el merge se haya completado.
  164. </para>
  165. </note>
  166. </para>
  167. </sect1>