Aspectos Teóricos
Los datos de configuración se hacen accesibles al constructor Zend_Config 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
Zend_Config 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.
Cada valor del array de datos de configuración se convierte en una propiedad del objeto
Zend_Config. 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
Zend_Config, 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.
Zend_Config implementa las interfaces Countable e
Iterator para facilitar el aceso sencillo a los datos de configuración. Así, uno
puede usar la función
count()
y constructores PHP como
foreach
sobre objetos Zend_Config.
Por defecto, los datos de configuración permitidos a través de Zend_Config son de sólo
lectura, y una asignación (e.g., $config->database->host = 'example.com')
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, Zend_Config soporta el borrado de elementos (unset) (i.e.
unset($config->database->host);). El método
readOnly() puede ser usado para determinar si las modificaciones a un objeto
Zend_Config están permitidas y el método setReadOnly() puede
ser usado para evitar cualquier modificación posterior a un objeto Zend_Config que fue
creado con permiso de modificaciones.
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 Zend_Config.
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.
Las clases del adaptador heredan de la clase Zend_Config debido a que utilizan su
funcionalidad.
La familia de clases Zend_Config permite organizar en secciones los datos de
configuración. Los objetos de adaptador Zend_Config pueden ser cargados con una sola
sección especificada, múltiples secciones especificadas, o todas las secciones (si no se especifica ninguna).
Las clases del adaptador Zend_Config 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.
Si tiene dos objetos Zend_Config, puede combinarlos en un único objeto usando la
función merge(). Por ejemplo, dados $config y
$localConfig, puede fusionar datos de $localConfig a
$config usando $config->merge($localConfig);. Los
ítemes en $localConfig sobrescribirán cualquier item con el mismo nombre en
$config.
El objeto Zend_Config que está ejecutando el merge debe haber sido construido
para permitir modificaciones, pasando TRUE como el segundo parámetro del
constructor. El método setReadOnly() puede entonces ser usado para evitar
cualquier modificación posterior después de que el merge se haya completado.