| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 15103 -->
- <!-- 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 <code>Countable</code> e <code>Iterator</code>
- para facilitar el aceso sencillo a los datos de configuración.
- Así, uno puede usar la función <ulink url="http://php.net/count"><code>count()</code></ulink>
- y constructores PHP como
- <ulink url="http://php.net/foreach"><code>foreach</code></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.,
- <code>$config->database->host = 'example.com'</code>)
- 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. <code>unset($config->database->host);</code>). El método
- <code>readOnly()</code> puede ser usado para determinar si las modificaciones a un objeto <classname>Zend_Config</classname>
- están permitidas y el método <code>setReadOnly()</code> 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 PHP, 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 <code>merge()</code>. Por ejemplo, dados <code>$config</code> y
- <code>$localConfig</code>, puede fusionar datos de <code>$localConfig</code> a <code>$config</code> usando
- <code>$config->merge($localConfig);</code>. Los ítemes en <code>$localConfig</code> sobrescribirán
- cualquier item con el mismo nombre en <code>$config</code>.
- <note>
- <para>
- El objeto <classname>Zend_Config</classname> que está ejecutando el merge debe haber sido construido
- para permitir modificaciones, pasando <code>true</code> como el segundo parámetro del constructor.
- El método <code>setReadOnly()</code> puede entonces ser usado para evitar cualquier
- modificación posterior después de que el merge se haya completado.
- </para>
- </note>
- </para>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|