Programmer's Reference Guide
Table des matières
- 36.1. Utiliser le registre
- 36.1.1. Mettre des valeurs dans le registre
- 36.1.2. Lire des valeurs du registre
- 36.1.3. Construire un objet registre
- 36.1.4. Accéder au registre comme à un tableau
- 36.1.5. Accéder au registre comme à un objet
- 36.1.6. Vérifier si un index existe
- 36.1.7. Étendre le registre
- 36.1.8. Décharger le registre statique
Le registre est un conteneur pour stocker des objets et des valeurs dans l'espace d'application. En stockant la valeur dans le registre, le même objet est toujours disponible partout dans votre application. Ce mécanisme est une alternative à l'utilisation du stockage global.
L'utilisation typique du registre est par des méthodes statiques dans la classe Zend_Registry.
Alternativement, la classe est un tableau, donc vous pouvez avoir accès aux éléments stockés avec une interface
semblable au tableau.
Pour enregistrer une valeur dans le registre, il faut utiliser la méthode statique
set().
La valeur peut être un objet, un tableau, ou un scalaire. Vous pouvez changer la valeur stockée dans une
entrée spécifique du registre en utilisant set() pour enregistrer une nouvelle valeur.
L'index peut être un scalaire, une chaîne ou un entier, comme un tableau ordinaire.
Pour récupérer une entrée dans le registre,il faut utiliser la méthode statique get().
La méthode getInstance() retourne l'objet registre en entier.
Un objet registre est itératif.
Exemple 36.3. Exemple d'itération du registre
$registry = Zend_Registry::getInstance();
foreach ($registry as $index => $value) {
echo "Le registre index $index contient :\n";
var_dump($value);
}
En plus de pouvoir accéder au registre grâce aux méthodes statiques, vous pous pouvez créer une instance directement et l'utiliser en tant qu'objet.
L'instance du registre à laquelle vous avez accès par les méthodes statiques est simplement une instance et il est plus commode qu'il soit stocké statiquement, afin d'y avoir accès partout dans votre application.
Utiliser le constructeur traditionnel new pour créer une instance du registre. Ceci vous
donne la possibilité d'initialiser les entrées du registre avec un tableau associatif.
Exemple 36.4. Exemple de construction d'un registre
$registry = new Zend_Registry(array('index' => $value));
Après avoir construit cette instance, vous pouvez l'utiliser avec les fonctions habituelles de tableau, ou
vous pouvez rendre cette instance statique en utilisant la méthode setInstance().
Exemple 36.5. Exemple d'initialisation d'un registre statique
$registry = new Zend_Registry(array('index' => $value));
Zend_Registry::setInstance($registry);
La méthode setInstance() lèvera une Zend_Exception si un registre statique a
déjà été initialisé lors de son premier accès.
Si vous avez plusieurs valeurs à récupérer ou à enregistrer, vous pouvez trouver intéressant d'avoir accès au registre avec une notation de type tableau.
Exemple 36.6. Exemple d'accès de type tableau
$registry = Zend_Registry::getInstance();
$registry['index'] = $value;
var_dump( $registry['index'] );
Vous pouvez trouver aussi intéressant d'accéder au registre d'une manière orientée objet en utilisant les
noms d'index comme des propriétés d'objet. Pour cela, vous devez spécifier au constructeur du registre l'option
ArrayObject::ARRAY_AS_PROPS et initialiser l'instance statique. Vous devez faire ceci avant
d'accéder au registre statique. Attention en utilisant cette option, puisque
certaines versions de PHP ont des bugs quand il utilise le registre avec cette option.
Exemple 36.7. Exemple d'accès de type objet
// Dans votre fichier de lancement de l'application
$registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS)
Zend_Registry::setInstance($registry);
$registry->tree='apple';
// Ailleurs dans l'application
$registry = Zend_Registry::getInstance();
echo $registry->tree; // affiche 'apple'
$registry->index = $value;
var_dump($registry->index);
Pour savoir si un index particulier du registre a une valeur, il faut utiliser la méthode statique
isRegistered().
Exemple 36.8. Exemple avec la méthode isRegistered()
if (Zend_Registry::isRegistered($index)) {
$value = Zend_Registry::get($index);
}
Pour savoir si un index particulier du registre de type tableau a une valeur, il faut utiliser la fonction
isset() comme vous le feriez avec un tableau ordinaire.
Exemple 36.9. Exemple avec la méthode isset()
$registry = Zend_Registry::getInstance();
// En utilisant la syntaxe de type tableau
if (isset($registry['index'])) {
var_dump( $registry['index'] );
}
// En utilisant la syntaxe de type objet, si activé
if (isset($registry->index)) {
var_dump( $registry->index );
}
Le registre statique est une instance de la classe Zend_Registry. Si vous voulez ajouter une
fonctionnalité au registre, vous pouvez créer une classe qui étend Zend_Registry et ensuite vous
pouvez spécifier cette classe comme la classe à utiliser pour le registre statique. Utilisez la méthode statique
setClassName() pour spécifier la classe. La classe doit étendre Zend_Registry.
Exemple 36.10. Exemple d'affectation d'un nom de classe au registre
Zend_Registry::setClassName('Mon_Registre');
Zend_Registry::set('index', $value);
L'enregistrement lève une Zend_Exception si vous essayez d'affecter un nom de classe après
que le registre ait eu un premier accès. Il est recommandé de spécifier le nom de classe pour votre registre
statique dans le fichier de lancement de votre application.
Bien que ce ne soit pas normalement nécessaire, vous pouvez décharger l'instance de votre registre.
Utilisez la méthode statique _unsetInstance().
![]() |
Risque de perte de données |
|---|---|
Quand vous utilisez le code |
Vous pourriez utiliser cette méthode, par exemple, si vous voulez utiliser setInstance() or
setClassName() après que l'objet de registre statique a été initialisé. Décharger l'instance
statique vous permet d'utiliser ces méthodes.
Exemple 36.11. Exemple avec la méthode _unsetInstance()
Zend_Registry::set('index', $value);
Zend_Registry::_unsetInstance();
// Changer la classe
Zend_Registry::setClassName('Mon_Registre');
Zend_Registry::set('index', $value);
Search the Manual
Components
Languages Available
Translation Status Reports
View the current status report of Zend Framework manual translations.

![[Note]](/images/note.gif)