Maison Bibliothèques PHP Autres bibliothèques Bibliothèque PHP pour les conteneurs d'injection de dépendances
Bibliothèque PHP pour les conteneurs d'injection de dépendances
<?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.


Clause de non-responsabilité

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

Comprendre la série de conteneurs d'injection de dépendances PHP (3) Symfony Comprendre la série de conteneurs d'injection de dépendances PHP (3) Symfony

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.

Comprendre la série de conteneurs d'injection de dépendances PHP (1) Qu'est-ce que Comprendre la série de conteneurs d'injection de dépendances PHP (1) Qu'est-ce que

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.

Comprendre la série de conteneurs d'injection de dépendances PHP (2) Ce dont vous avez besoin Comprendre la série de conteneurs d'injection de dépendances PHP (2) Ce dont vous avez besoin

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 :

Quelle bibliothèque PHP ORM est la meilleure pour extraire les fournisseurs de bases de données et cartographier les modèles de domaine/relationnels ? Quelle bibliothèque PHP ORM est la meilleure pour extraire les fournisseurs de bases de données et cartographier les modèles de domaine/relationnels ?

05 Jan 2025

Recommandations de la bibliothèque PHP ORMEn ce qui concerne le mappage objet-relationnel (ORM) pour PHP, plusieurs bibliothèques se démarquent. Pour aborder...

Comment puis-je réduire au mieux mon application AngularJS pour éviter les problèmes d'injection de dépendances ? Comment puis-je réduire au mieux mon application AngularJS pour éviter les problèmes d'injection de dépendances ?

19 Nov 2024

Meilleures pratiques pour réduire les applications AngularJSDans le contexte de la réduction des applications AngularJS, vous avez peut-être rencontré des inquiétudes concernant...

Pourquoi l'affectation automatique n'est-elle pas autorisée pour les conteneurs de bibliothèque standard dans C 11 ? Pourquoi l'affectation automatique n'est-elle pas autorisée pour les conteneurs de bibliothèque standard dans C 11 ?

16 Nov 2024

Assignation de déplacement automatique dans les conteneurs de bibliothèque standardLa norme C 11 garantit que l'affectation de déplacement automatique (affectation d'un objet à lui-même...

See all articles