Zend_Config-TheoryOfOperation.xml 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15103 -->
  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 <classname>Zend_Config</classname>
  8. a través de un array asociativo, que puede ser multidimensional, para permitir
  9. organizar los datos desde lo general a lo específico. Las clases de adaptador concretas
  10. permiten construir una tabla asociativa para el constructor de <classname>Zend_Config</classname>
  11. a partir de un sistema de almacenamiento de datos de configuración. Algunos scripts
  12. de usuario pueden proveer esos arrays directamente al constructor Zend_Config,
  13. sin usar una clase adaptador, lo cual puede ser apropiado en ciertas ocasiones.
  14. </para>
  15. <para>
  16. Cada valor del array de datos de configuración se convierte en una propiedad del objeto <classname>Zend_Config</classname>.
  17. La clave es usada como el nombre de la propiedad. Si un valor es un array por sí solo, entonces la propiedad
  18. de objeto resultante es creada como un nuevo objeto
  19. <classname>Zend_Config</classname>, cargado con los datos del array. Esto ocurre recursivamente, de forma
  20. que una jerarquía de datos de configuración puede ser creada con cualquier número de niveles.
  21. </para>
  22. <para>
  23. <classname>Zend_Config</classname> implementa las interfaces <code>Countable</code> e <code>Iterator</code>
  24. para facilitar el aceso sencillo a los datos de configuración.
  25. Así, uno puede usar la función <ulink url="http://php.net/count"><code>count()</code></ulink>
  26. y constructores PHP como
  27. <ulink url="http://php.net/foreach"><code>foreach</code></ulink> sobre objetos
  28. <classname>Zend_Config</classname>.
  29. </para>
  30. <para>
  31. Por defecto, los datos de configuración permitidos a través de <classname>Zend_Config</classname>
  32. son de sólo lectura, y una asignación (e.g.,
  33. <code>$config-&gt;database-&gt;host = 'example.com'</code>)
  34. provoca que se lance una excepción. Este comportamiento por defecto puede ser sobrescrito a través
  35. del constructor, sin embargo, para permitir la modificación de valores de datos. Además, cuando
  36. las modificaciones están permitidas, <classname>Zend_Config</classname> soporta el borrado de elementos (unset) (i.e. <code>unset($config-&gt;database-&gt;host);</code>). El método
  37. <code>readOnly()</code> puede ser usado para determinar si las modificaciones a un objeto <classname>Zend_Config</classname>
  38. están permitidas y el método <code>setReadOnly()</code> puede ser usado para evitar cualquier modificación
  39. posterior a un objeto <classname>Zend_Config</classname> que fue creado con permiso de modificaciones.
  40. <note>
  41. <para>
  42. Es importante no confundir tales modificaciones en memoria con guardar los datos de configuración a un
  43. medio de almacenamiento específico. Las herramientas para crear y modificar datos de configuración para
  44. distintos medios de almacenamiento están fuera del alcance de <classname>Zend_Config</classname>.
  45. Existen soluciones third-party de código abierto con el propósito de crear y modificar
  46. datos de configuración de distintos medios de almacenamiento.
  47. </para>
  48. </note>
  49. </para>
  50. <para>
  51. Las clases del adaptador heredan de la clase <classname>Zend_Config</classname> debido a que utilizan su funcionalidad.
  52. </para>
  53. <para>
  54. La familia de clases <classname>Zend_Config</classname> permite organizar en secciones
  55. los datos de configuración. Los objetos de adaptador <classname>Zend_Config</classname>
  56. pueden ser cargados con una sola sección especificada, múltiples secciones especificadas,
  57. o todas las secciones (si no se especifica ninguna).
  58. </para>
  59. <para>
  60. Las clases del adaptador <classname>Zend_Config</classname> soportan un modelo de herencia única
  61. que permite que los datos de configuración hereden de una sección de datos de configuración a otra.
  62. Esto es provisto con el fin de reducir o eliminar la necesidad de duplicar datos de configuración por
  63. distintos motivos. Una sección heredada puede también sobrescribir los valores que hereda de su sección
  64. padre. Al igual que la herencia de clases PHP, una sección puede heredar de una sección padre,
  65. la cual puede heredar de una sección abuela, etc..., pero la herencia múltiple
  66. (i.e., la sección C heredando directamente de las secciones padre A y B) no está permitida.
  67. </para>
  68. <para>
  69. Si tiene dos objetos <classname>Zend_Config</classname>, puede combinarlos en un único
  70. objeto usando la función <code>merge()</code>. Por ejemplo, dados <code>$config</code> y
  71. <code>$localConfig</code>, puede fusionar datos de <code>$localConfig</code> a <code>$config</code> usando
  72. <code>$config-&gt;merge($localConfig);</code>. Los ítemes en <code>$localConfig</code> sobrescribirán
  73. cualquier item con el mismo nombre en <code>$config</code>.
  74. <note>
  75. <para>
  76. El objeto <classname>Zend_Config</classname> que está ejecutando el merge debe haber sido construido
  77. para permitir modificaciones, pasando <code>true</code> como el segundo parámetro del constructor.
  78. El método <code>setReadOnly()</code> puede entonces ser usado para evitar cualquier
  79. modificación posterior después de que el merge se haya completado.
  80. </para>
  81. </note>
  82. </para>
  83. </sect1>
  84. <!--
  85. vim:se ts=4 sw=4 et:
  86. -->