Tabla de contenidos
- 59.1. Usando el registro
- 59.1.1. Estableciendo valores en el registro
- 59.1.2. Obteniendo valores del registro
- 59.1.3. Construyendo un objeto Registry
- 59.1.4. Accediendo al registro como un array
- 59.1.5. Accediendo al registro como un objeto
- 59.1.6. Consultando si existe un índice
- 59.1.7. Extendiendo el registro
- 59.1.8. Eliminando el registro estático
Un registro es un contenedor para almacenar objetos y valores en el espacio de la aplicación. Al almacenar el valor en un registro, el mismo objeto está siempre disponible en toda su aplicación. Este mecanismo es una alternativa al uso de almacenamiento global.
El método habitual para usar registros con Zend Framework es a través de métodos estáticos en la
clase Zend_Registry. Alternativamente, el registro puede utilizarse como un
objeto de tipo array, de modo que puede acceder a los elementos almacenados en él con una interfaz
cómoda similar a un array.
Utilice el método estático set() para almacenar una entrada en el registro.
El valor devuelto puede ser un objeto, un array o un escalar.
Puede cambiar el valor almacenado en una entrada específica de
el registro llamando al método set() para establecer la entrada
a un nuevo valor.
El índice puede ser un escalar (NULL, cadena o número), como un
array ordinario.
Para recuperar una entrada del registro, utilice el método estático
get().
El método getInstance() devuelve el objeto de registro singleton.
Este objeto de registro es iterable, lo que hace que todos los valores almacenados en el registro sean fácilmente
accesibles.
Ejemplo 59.3. Ejemplo de iteración sobre el registro
$registry = Zend_Registry::getInstance();
foreach ($registry as $index => $value) {
echo "Registry index $index contains:\n";
var_dump($value);
}
Además de acceder al registro estático mediante métodos estáticos, puede crear una instancia directamente y utilizarla como un objeto.
La instancia del registro a la que accede a través de los métodos estáticos es simplemente una de esas instancias. Es por conveniencia que se almacena de forma estática, para que sea accesible desde cualquier parte de una aplicación.
Utilice el operador tradicional new para instanciar
Zend_Registry. Instanciar Zend_Registry
usando su constructor también facilita la inicialización de las entradas en el registro al
tomar un array asociativo como argumento.
Ejemplo 59.4. Ejemplo de construcción de un registro
$registry = new Zend_Registry(array('index' => $value));
Una vez instanciado un objeto Zend_Registry de este tipo,
puede utilizarlo llamando a cualquier método de objeto de tipo array o estableciéndolo
como la instancia singleton para Zend_Registry con el método
estático setInstance().
Ejemplo 59.5. Ejemplo de inicialización del registro singleton
$registry = new Zend_Registry(array('index' => $value));
Zend_Registry::setInstance($registry);
El método setInstance() lanza una
Zend_Exception si el registro estático ya ha sido
inicializado.
Si tiene varios valores que obtener o establecer, puede resultarle cómodo acceder al registro con notación de array.
Ejemplo 59.6. Ejemplo de acceso como array
$registry = Zend_Registry::getInstance(); $registry['index'] = $value; var_dump( $registry['index'] );
También puede resultarle cómodo acceder al registro
de forma orientada a objetos, utilizando los nombres de los índices como propiedades
de objeto.
Debe construir específicamente el objeto de registro
usando la opción ArrayObject::ARRAY_AS_PROPS
e inicializar la instancia estática para habilitar esta funcionalidad.
![]() |
Nota |
|---|---|
Debe establecer la opción |
![]() |
Problemas conocidos con la opción ArrayObject::ARRAY_AS_PROPS |
|---|---|
Algunas versiones de PHP han demostrado ser muy problemáticas al usar el
registro con la opción |
Ejemplo 59.7. Ejemplo de acceso como objeto
// in your application bootstrap: $registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS) Zend_Registry::setInstance($registry); $registry->tree = 'apple'; . . . // in a different function, elsewhere in your application: $registry = Zend_Registry::getInstance(); echo $registry->tree; // echo's "apple" $registry->index = $value; var_dump($registry->index);
Para averiguar si un índice concreto en el registro
se ha establecido, utilice el método estático isRegistered().
Ejemplo 59.8. Ejemplo de uso del método isRegistered()
if (Zend_Registry::isRegistered($index)) {
$value = Zend_Registry::get($index);
}
Para averiguar si un índice concreto en un array u objeto de registro
tiene un valor, utilice la función isset()
como lo haría con un array ordinario.
Ejemplo 59.9. Ejemplo de uso del método isset()
$registry = Zend_Registry::getInstance();
// using array access syntax
if (isset($registry['index'])) {
var_dump( $registry['index'] );
}
// using object access syntax
if (isset($registry->index)) {
var_dump( $registry->index );
}
El registro estático es una instancia de la clase Zend_Registry.
Si desea añadir funcionalidad al registro, debe
crear una clase que extienda Zend_Registry y
especificar esta clase para instanciar el singleton en el registro estático.
Utilice el método estático setClassName() para especificar
la clase.
![]() |
Nota |
|---|---|
La clase debe ser una subclase de |
Ejemplo 59.10. Ejemplo de cómo especificar el nombre de clase del registro singleton
Zend_Registry::setClassName('My_Registry');
Zend_Registry::set('index', $value);
El registro lanza una Zend_Exception si intenta establecer el
nombre de clase después de que se haya accedido al registro por primera vez.
Por lo tanto, se recomienda especificar el nombre de clase para su
registro estático en el bootstrap de su aplicación.
Aunque normalmente no es necesario, puede
eliminar la instancia singleton del registro, si lo desea.
Utilice el método estático _unsetInstance() para hacerlo.
![]() |
Riesgo de pérdida de datos |
|---|---|
Cuando utiliza |
Podría usar este método, por ejemplo, si desea
usar setInstance() o setClassName()
después de que el objeto de registro singleton haya sido inicializado.
Eliminar la instancia singleton le permite usar estos métodos
incluso después de que el objeto de registro singleton haya sido establecido. Usar
Zend_Registry de esta manera no se recomienda para aplicaciones
y entornos típicos.
Ejemplo 59.11. Ejemplo de uso del método _unsetInstance()
Zend_Registry::set('index', $value);
Zend_Registry::_unsetInstance();
// change the class
Zend_Registry::setClassName('My_Registry');
Zend_Registry::set('index', $value);
![[Note]](images/note.png)
![[Warning]](images/warning.png)