<?php namespace Auryn; class CachingReflector implements Reflector { const CACHE_KEY_CLASSES = 'auryn.refls.classes.'; const CACHE_KEY_CTORS = 'auryn.refls.ctors.'; const CACHE_KEY_CTOR_PARAMS = 'auryn.refls.ctor-params.'; const CACHE_KEY_FUNCS = 'auryn.refls.funcs.'; const CACHE_KEY_METHODS = 'auryn.refls.methods.'; private $reflector; private $cache; public function __construct(Reflector $reflector = null, ReflectionCache $cache = null) { $this->reflector = $reflector ?: new StandardReflector; $this->cache = $cache ?: new ReflectionCacheArray; } public function getClass($class) { $cacheKey = self::CACHE_KEY_CLASSES . strtolower($class); if (!$reflectionClass = $this->cache->fetch($cacheKey)) { $reflectionClass = new \ReflectionClass($class); $this->cache->store($cacheKey, $reflectionClass); } return $reflectionClass; }
Notre idée est que lorsque l'application utilise une classe Foo, elle créera la classe Foo et appellera la méthode de la classe Foo. Si cette méthode nécessite une classe Bar, elle créera la classe Bar et appellera la méthode de la classe Bar, et cette méthode Si une classe Bim est nécessaire, la classe Bim sera créée puis d'autres travaux seront effectués. L'idée d'utiliser l'injection de dépendances est que l'application utilise la classe Foo, la classe Foo a besoin de la classe Bar et la classe Bar a besoin de la classe Bim, puis créez d'abord la classe Bim, puis créez la classe Bar et injectez Bim, puis créez la classe Foo et injectez la classe Bar, puis appelez la méthode Foo, Foo appelle la méthode Bar, puis effectuez d'autres travaux. Il s’agit du modèle d’incrackée de contrôle. Le contrôle des dépendances est inversé jusqu'au début de la chaîne d'appel. De cette façon, vous avez un contrôle total sur les dépendances et contrôlez le comportement de votre programme en ajustant les différents objets injectés. Par exemple, la classe Foo utilise Memcache et vous pouvez utiliser redis à la place sans modifier le code de la classe Foo.
L'idée après avoir utilisé un conteneur d'injection de dépendances est que si l'application a besoin d'accéder à la classe Foo, elle récupère la classe Foo du conteneur, le conteneur crée la classe Bim, puis crée la classe Bar et injecte Bim, puis crée le Foo et y injecte Bar, puis applique le programme appelle la méthode Foo, Foo appelle la méthode Bar, puis effectue d'autres travaux. En bref, le conteneur est responsable de l'instanciation, de l'injection des dépendances, du traitement des dépendances, etc.
Toutes les ressources de ce site proviennent d'internautes ou sont réimprimées par les principaux sites de téléchargement. Veuillez vérifier vous-même l'intégrité du logiciel ! Toutes les ressources de ce site sont uniquement à titre de référence d'apprentissage. Merci de ne pas les utiliser à des fins commerciales. Sinon, vous serez responsable de toutes les conséquences ! En cas d'infraction, veuillez nous contacter pour la supprimer. Coordonnées : admin@php.cn
Article connexe
28 Dec 2016
Jusqu'à présent, nous avons parlé de quelques concepts de base. Les exemples des deux premiers articles nous sont très utiles pour comprendre l'implémentation de l'injection de dépendances. Nous allons maintenant nous plonger dans l'implémentation du conteneur de services Symfony 2.
28 Dec 2016
Cet article est le premier chapitre de la série sur l'implémentation des conteneurs d'injection de dépendances PHP.
30 Dec 2023
Titre : La différence entre le conteneur Spring et le conteneur IOC et l'optimisation du mécanisme d'injection des dépendances du projet Introduction Le framework Spring est l'un des frameworks très importants dans le développement Java. Il gère et organise les dépendances entre les objets via le conteneur IOC (InverseofControl). Cet article analysera les différences entre les conteneurs Spring et les conteneurs IOC et fournira des exemples de code spécifiques pour optimiser le mécanisme d'injection de dépendances du projet. La différence entre le conteneur Spring et le conteneur IOC Le conteneur Spring est une implémentation
05 Jun 2024
Question : Comment Composer simplifie-t-il l'installation de la bibliothèque PHP et la gestion des dépendances ? Réponse : Installez et mettez à jour les bibliothèques PHP. Gérer les dépendances de la bibliothèque. Générez des chargeurs automatiques pour simplifier l'utilisation de la bibliothèque.
15 Jun 2023
Dans le processus de développement PHP, nous devons souvent utiliser de nombreuses bibliothèques tierces pour simplifier notre travail de développement. Par exemple, nous devrons peut-être utiliser diverses bibliothèques tierces pour implémenter des fonctions telles que la pagination, la validation de formulaires et le traitement d'images. Cependant, à mesure que le nombre de bibliothèques dépendantes augmente, nous sommes également confrontés à des problèmes de gestion des dépendances. Comment installer et mettre à niveau ces bibliothèques dépendantes ? Comment s’assurer qu’il n’y aura pas de conflits entre les différents projets ? Comment gérer et maintenir facilement ces bibliothèques dépendantes ? Ce problème est un vrai casse-tête pour les développeurs PHP. Il existe cependant un outil
28 Dec 2016
Dans l'article précédent, nous avons utilisé un cas Web spécifique pour illustrer l'injection de dépendances. Aujourd'hui, nous allons parler du conteneur d'injection de dépendances (Container). Commençons par une déclaration importante :
Outils chauds Tags
Hot Tools
Une collection de 50 excellents algorithmes PHP classiques
Algorithme PHP classique, apprenez d'excellentes idées et élargissez votre réflexion
Petite bibliothèque PHP pour optimiser les images
Petite bibliothèque PHP pour optimiser les images
Classe de fonctions PHP pour l'algorithme de probabilité gagnante
Classe de fonctions PHP pour l'algorithme de probabilité gagnante