Zend_Config-TheoryOfOperation.xml 5.8 KB

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