| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- <?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
- <emphasis>Iterator</emphasis>
- 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
- <varname>$config</varname>
- y
- <varname>$localConfig</varname>
- , puede fusionar datos de
- <varname>$localConfig</varname>
- a
- <varname>$config</varname>
- usando
- <methodname>$config->merge($localConfig);</methodname>
- . Los
- ítemes en
- <varname>$localConfig</varname>
- sobrescribirán cualquier item con el mismo nombre en
- <varname>$config</varname>
- .
- <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>
|