| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 16674 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.config.theory_of_operation">
- <title>Aspectos Teóricos</title>
- <para> Los datos de configuración se hacen accesibles al constructor <classname>Zend_Config</classname> a través de
- un array asociativo, que puede ser multidimensional, para permitir organizar los datos desde lo general a lo
- específico. Las clases de adaptador concretas permiten construir una tabla asociativa para el constructor de
- <classname>Zend_Config</classname> a partir de un sistema de almacenamiento de datos de configuración.
- Algunos scripts de usuario pueden proveer esos arrays directamente al constructor Zend_Config, sin usar una
- clase adaptador, lo cual puede ser apropiado en ciertas ocasiones. </para>
- <para> Cada valor del array de datos de configuración se convierte en una propiedad del objeto
- <classname>Zend_Config</classname>. La clave es usada como el nombre de la propiedad. Si un valor es un
- array por sí solo, entonces la propiedad de objeto resultante es creada como un nuevo objeto
- <classname>Zend_Config</classname>, cargado con los datos del array. Esto ocurre recursivamente, de forma
- que una jerarquía de datos de configuración puede ser creada con cualquier número de niveles. </para>
- <para>
- <classname>Zend_Config</classname> implementa las interfaces <emphasis>Countable</emphasis> e
- <methodname>Iterator</methodname> para facilitar el aceso sencillo a los datos de configuración. Así, uno
- puede usar la función <ulink url="http://php.net/count">
- <methodname>count()</methodname>
- </ulink> y constructores <acronym>PHP</acronym> como <ulink url="http://php.net/foreach">
- <emphasis>foreach</emphasis>
- </ulink> sobre objetos <classname>Zend_Config</classname>. </para>
- <para> Por defecto, los datos de configuración permitidos a través de <classname>Zend_Config</classname> son de sólo
- lectura, y una asignación (e.g., <methodname>$config->database->host = 'example.com'</methodname>)
- provoca que se lance una excepción. Este comportamiento por defecto puede ser sobrescrito a través del
- constructor, sin embargo, para permitir la modificación de valores de datos. Además, cuando las modificaciones
- están permitidas, <classname>Zend_Config</classname> soporta el borrado de elementos (unset) (i.e.
- <methodname>unset($config->database->host);</methodname>). El método
- <methodname>readOnly()</methodname> puede ser usado para determinar si las modificaciones a un objeto
- <classname>Zend_Config</classname> están permitidas y el método <methodname>setReadOnly()</methodname> puede
- ser usado para evitar cualquier modificación posterior a un objeto <classname>Zend_Config</classname> que fue
- creado con permiso de modificaciones. <note>
- <para> Es importante no confundir tales modificaciones en memoria con guardar los datos de configuración a
- un medio de almacenamiento específico. Las herramientas para crear y modificar datos de configuración
- para distintos medios de almacenamiento están fuera del alcance de <classname>Zend_Config</classname>.
- Existen soluciones third-party de código abierto con el propósito de crear y modificar datos de
- configuración de distintos medios de almacenamiento. </para>
- </note>
- </para>
- <para> Las clases del adaptador heredan de la clase <classname>Zend_Config</classname> debido a que utilizan su
- funcionalidad. </para>
- <para> La familia de clases <classname>Zend_Config</classname> permite organizar en secciones los datos de
- configuración. Los objetos de adaptador <classname>Zend_Config</classname> pueden ser cargados con una sola
- sección especificada, múltiples secciones especificadas, o todas las secciones (si no se especifica ninguna). </para>
- <para> Las clases del adaptador <classname>Zend_Config</classname> soportan un modelo de herencia única que permite
- que los datos de configuración hereden de una sección de datos de configuración a otra. Esto es provisto con el
- fin de reducir o eliminar la necesidad de duplicar datos de configuración por distintos motivos. Una sección
- heredada puede también sobrescribir los valores que hereda de su sección padre. Al igual que la herencia de
- clases <acronym>PHP</acronym>, una sección puede heredar de una sección padre, la cual puede heredar de una
- sección abuela, etc..., pero la herencia múltiple (i.e., la sección C heredando directamente de las secciones
- padre A y B) no está permitida. </para>
- <para> Si tiene dos objetos <classname>Zend_Config</classname>, puede combinarlos en un único objeto usando la
- función <methodname>merge()</methodname>. Por ejemplo, dados <methodname>$config</methodname> y
- <methodname>$localConfig</methodname>, puede fusionar datos de <methodname>$localConfig</methodname> a
- <methodname>$config</methodname> usando <methodname>$config->merge($localConfig);</methodname>. Los
- ítemes en <methodname>$localConfig</methodname> sobrescribirán cualquier item con el mismo nombre en
- <methodname>$config</methodname>. <note>
- <para> El objeto <classname>Zend_Config</classname> que está ejecutando el merge debe haber sido construido
- para permitir modificaciones, pasando <constant>TRUE</constant> como el segundo parámetro del
- constructor. El método <methodname>setReadOnly()</methodname> puede entonces ser usado para evitar
- cualquier modificación posterior después de que el merge se haya completado. </para>
- </note>
- </para>
- </sect1>
|