Zend_Config-TheoryOfOperation.xml 6.2 KB

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