TigerZF
🌐Español

21.2. Teoría de funcionamiento

Los datos de configuración se ponen a disposición del constructor de Zend_Config a través de un array asociativo, que puede ser multidimensional, con el fin de apoyar la organización de los datos de lo general a lo específico. Las clases adaptadoras concretas adaptan los datos de configuración desde el almacenamiento para producir el array asociativo para el constructor de Zend_Config. Los scripts de usuario pueden proporcionar dichos arrays directamente al constructor de Zend_Config, sin usar una clase adaptadora, ya que puede ser apropiado hacerlo en ciertas situaciones.

Cada valor del array de datos de configuración se convierte en una propiedad del objeto Zend_Config. La clave se utiliza como el nombre de la propiedad. Si un valor es en sí mismo un array, entonces la propiedad del objeto resultante se crea como un nuevo objeto Zend_Config, cargado con los datos del array. Esto ocurre de forma recursiva, de manera que se puede crear una jerarquía de datos de configuración con cualquier número de niveles.

Zend_Config implementa las interfaces Countable y Iterator con el fin de facilitar el acceso sencillo a los datos de configuración. Así, se puede utilizar la función count() y construcciones de PHP como foreach con objetos Zend_Config.

Por defecto, los datos de configuración disponibles a través de Zend_Config son de solo lectura, y una asignación (por ejemplo, $config->database->host = 'example.com';) da como resultado una excepción lanzada. Este comportamiento por defecto puede ser anulado a través del constructor, sin embargo, para permitir la modificación de los valores de datos. Además, cuando se permiten modificaciones, Zend_Config admite la eliminación de valores (es decir, unset($config->database->host)). El método readOnly() se puede utilizar para determinar si se permiten modificaciones a un determinado objeto Zend_Config, y el método setReadOnly() se puede utilizar para detener cualquier modificación posterior de un objeto Zend_Config que fue creado permitiendo modificaciones.

[Note] Nota

Es importante no confundir estas modificaciones en memoria con el guardado de los datos de configuración en un medio de almacenamiento específico. Las herramientas para crear y modificar datos de configuración para varios medios de almacenamiento están fuera del alcance de Zend_Config. Existen fácilmente disponibles soluciones de código abierto de terceros con el propósito de crear y modificar datos de configuración para varios medios de almacenamiento.

Las clases adaptadoras heredan de la clase Zend_Config, ya que utilizan su funcionalidad.

La familia de clases Zend_Config permite organizar los datos de configuración en secciones. Los objetos adaptadores de Zend_Config pueden cargarse con una única sección especificada, varias secciones especificadas, o todas las secciones (si no se especifica ninguna).

Las clases adaptadoras de Zend_Config admiten un modelo de herencia simple que permite que los datos de configuración se hereden de una sección de datos de configuración a otra. Esto se proporciona con el fin de reducir o eliminar la necesidad de duplicar datos de configuración para diferentes propósitos. Una sección heredera también puede sobrescribir los valores que hereda a través de su sección padre. Al igual que la herencia de clases de PHP, una sección puede heredar de una sección padre, que a su vez puede heredar de una sección abuela, y así sucesivamente, pero la herencia múltiple (es decir, la sección C heredando directamente de las secciones padre A y B) no está soportada.

Si tiene dos objetos Zend_Config, puede combinarlos en un único objeto usando la función merge(). Por ejemplo, dados $config y $localConfig, puede combinar los datos de $localConfig en $config usando $config->merge($localConfig);. Los elementos en $localConfig sobrescribirán cualquier elemento con el mismo nombre en $config.

[Note] Nota

El objeto Zend_Config que realiza la combinación debe haber sido construido para permitir modificaciones, pasando TRUE como el segundo parámetro del constructor. El método setReadOnly() se puede utilizar entonces para evitar cualquier modificación posterior una vez completada la combinación.