L'exemple de cet article décrit l'utilisation de l'objet Zend_Registry dans le tutoriel Zend Framework. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Utilisation du registre d'objets (registre)
Le registre d'objets (ou entrepôt d'objets) est un objet utilisé dans tout l'espace d'application . Un conteneur pour stocker des objets et des valeurs. En y stockant des objets, nous pouvons utiliser le même objet n'importe où tout au long du projet. Ce mécanisme équivaut à un stockage global.
Nous pouvons utiliser le registre d'objets via les méthodes statiques de la classe Zend_Registry. De plus, puisque cette classe est un objet tableau, vous pouvez utiliser le formulaire tableau pour accéder aux méthodes de classe.
1. Définissez la valeur dans le registre
Pour enregistrer un contenu dans le registre, nous pouvons utiliser la méthode statique set().
Exemple 1. Exemple d'utilisation de set() :
Zend_Registry::set('index', $value);
$value peut être un objet, un tableau ou un scalaire. Vous pouvez utiliser à nouveau set() pour définir une nouvelle valeur sur une valeur existante dans le registre.
Le paramètre index peut être un scalaire, une chaîne ou un entier, tout comme l'utilisation d'un tableau, similaire au nom d'index/clé du tableau.
2. Obtenez la valeur dans le registre
Vous pouvez utiliser la méthode get() pour obtenir la valeur d'un élément dans le registre.
Exemple 2. Exemple de méthode get() :
$value = Zend_Registry::get('index');
getInstance() renvoie un objet de registre statique.
Les objets du registre sont itérables.
Exemple 3. Itérer un objet de registre :
$registry = Zend_Registry::getInstance(); foreach ($registry as $index => $value) { echo "Registry index $index contains:/n"; var_dump($value); }
3. Créer un objet de registre
En plus de using En plus des méthodes statiques pour accéder à l'objet Registry, vous pouvez l'instancier directement, tout comme si vous utilisiez un objet normal.
Si vous accédez à l'instance de l'objet de registre via une méthode statique, cela est pratique pour le stockage statique et vous pouvez y accéder n'importe où dans le programme.
Si vous utilisez la nouvelle méthode traditionnelle pour créer une instance du registre, vous pouvez utiliser un tableau pour initialiser le contenu du registre.
Exemple 4. Créer un objet de registre
$registry = new Zend_Registry(array('index' => $value));
Après avoir créé cette instance d'objet, vous pouvez utiliser la méthode d'objet tableau pour l'utiliser , ou vous pouvez définir cette instance d'objet sur une instance d'objet statique via la méthode statique setInstance().
Exemple 5. Exemple d'initialisation du registre statique
$registry = new Zend_Registry(array('index' => $value)); Zend_Registry::setInstance($registry);
Si l'objet de registre statique a été initialisé, la méthode setInstance() le fera lancer une exception Zend_Exception.
4. Accédez à l'objet Registre comme un tableau
Si vous souhaitez accéder ou définir plusieurs valeurs à la fois, vous constaterez que l'utilisation de la méthode tableau est très pratique.
Exemple 6. Exemple d'accès à la méthode tableau :
$registry = Zend_Registry::getInstance(); $registry['index'] = $value; var_dump( $registry['index'] );
5. Il est également pratique d'accéder aux objets du registre à l'aide d'un style orienté objet, en utilisant les noms de propriétés des objets comme index. Pour ce faire, vous devez créer l'objet de registre à l'aide de l'option ArrayObject::ARRAY_AS_PROPS et initialiser l'instance statique. Vous devez le faire avant le premier accès au registre statique. Soyez prudent avec cette option, car certaines versions de PHP présentent des bugs lors de l'utilisation de cette option.
Exemple 7. Accès sous forme d'objet :
//在你的bootstrap代码中: $registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS) Zend_Registry::setInstance($registry); $registry->tree = 'apple'; . . . //在程序的任何其它地方: $registry = Zend_Registry::getInstance(); echo $registry->tree; // echo's "apple" $registry->index = $value; var_dump($registry->index);
6. Demander si un index existe
peut être used La méthode statique isRegistered() demande si un index spécifique a un ensemble de valeurs correspondant.
Exemple 8. isRegistered() Exemple :
if (Zend_Registry::isRegistered($index)) { $value = Zend_Registry::get($index); }
Pour déterminer si la valeur d'un index spécifique dans un objet tableau est définie Défini, vous pouvez utiliser la fonction isset() comme vous le feriez avec un tableau ordinaire.
Exemple 9. isset() Exemple :
$registry = Zend_Registry::getInstance(); // using array-access syntax if (isset($registry['index'])) { var_dump( $registry['index'] ); } // using object-access syntax, if enabled if (isset($registry->index)) { var_dump( $registry->index ); }
7. Objet de registre étendu
L'objet de registre statique est une instance de la classe Zend_Registry. Si vous souhaitez y ajouter des fonctionnalités, vous pouvez hériter de la classe Zend_Registry puis spécifier d'utiliser cette classe pour accéder au registre d'objets. Vous pouvez utiliser la méthode statique setClassName() pour spécifier la classe à utiliser. Notez que cette classe doit être une sous-classe de Zend_Registry.
Exemple 10. Spécifiez le nom de classe du registre statique :
Zend_Registry::setClassName('My_Registry'); Zend_Registry::set('index', $value);
Si vous essayez de le définir après que le registre a été nom de classe accédé, le registre lève une exception. Il est recommandé de définir ce nom de classe dans le code boostrap (c'est-à-dire index.php).
8. Supprimez le registre statique
Bien que cela ne soit pas obligatoire, vous pouvez utiliser la méthode _unsetInstance() pour supprimer l'instance statique du registre.
[Note] Risque de perte de données
Lors de l'utilisation de _unsetInstance(), toutes les données du registre statique seront perdues et ne pourront pas être récupérées.
Parfois, vous aurez peut-être besoin de la méthode _unsetInstance(). Par exemple, si vous souhaitez utiliser setInstance() ou setClassName() après l'initialisation de l'objet de registre, vous pouvez utiliser _unsetInstance() pour supprimer l'instance statique avant d'utiliser ces méthodes.
Exemple 11. _unsetInstance() Exemple :
aidé.Zend_Registry::set('index', $value); Zend_Registry::_unsetInstance(); // 改变我们要使用的类 Zend_Registry::setClassName('My_Registry'); Zend_Registry::set('index', $value);
Pour plus d'articles sur l'analyse de l'utilisation des objets Zend Framework Zend_Registry, veuillez faire attention au site Web PHP chinois !