En savoir plus sur l'injection de dépendances en PHP et voir comment l'appliquer

青灯夜游
Libérer: 2023-04-10 16:38:01
avant
3385 Les gens l'ont consulté

Qu'est-ce que l'injection de dépendances ? Cet article vous guidera à travers l'injection de dépendances en PHP, vous présentera les raisons de l'injection de dépendances et ses applications. J'espère qu'il vous sera utile !

En savoir plus sur l'injection de dépendances en PHP et voir comment l'appliquer

1. Qu'est-ce que l'injection de dépendances (DI)

  • L'injection de dépendances (DI) fait essentiellement référence à l'injection automatique de dépendances de classe via le constructeur
  • En termes simples, il s'agit de votre système d'exploitation actuel. une classe, mais certaines méthodes ou fonctions de cette classe ne peuvent pas être complétées par cette classe seule, mais peuvent être complétées avec l'aide d'une autre classe. Le signe le plus direct est lorsque les données du paramètre sont transmises en tant qu'objet. À proprement parler, vous souhaitez faire fonctionner une autre classe dans une autre classe. Il existe une interdépendance entre les deux classes. La méthode de passage des paramètres est appelée injection. La raison de l'injection de dépendances
  • Au début, lorsque PHP en a besoin. pour utiliser une autre classe dans une classe, il effectuera les opérations suivantes
  • Par exemple, si je dois utiliser la classe adaptateur dans la classe conteneur, elle doit être instanciée avant utilisation

Si nécessaire Pour un grand nombre de classes externes , cela entraînera un degré de couplage trop élevé, ce qui peut facilement entraîner des difficultés de maintenance ultérieuresEn termes simples, cela signifie que le conteneur ne peut pas fonctionner sans classes externes, ce qu'on appelle un degré de couplage trop élevé

<?php
class container
{
    private $adapter;

    public function __construct()
    {
        $this->adapter = new adapter();
    }
}
Copier après la connexion

  • 3. Injection de dépendance simple
  • Le code ci-dessus est trop fortement couplé, ce qui conduit à l'émergence de l'injection de dépendance, principalement pour comprendre le couplage
  • Comme indiqué ci-dessous, il suffit de transmettre l'objet de classe qui doit être utilisé. Entrez-le simplement

Les paramètres de l'opération d'injection de dépendances sont des objets, pas des paramètres ordinaires. Avez-vous une meilleure compréhensionMais une injection de dépendances aussi simple fera que si vous dépendez de beaucoup de classes, vous serez très long et facile à confondre

<?php
class container
{
    private $adapter;

    public function __construct(adapter $adapter)
    {
        $this->adapter = $adapter;
    }
}
Copier après la connexion

4. Injection de dépendances de haut niveau
  • Afin de résoudre le problème de confusion des paramètres ci-dessus, l'injection de dépendances a évolué à ce moment
  • Grâce à la méthode magique, __get sets l'objet
  • À ce stade, nous pouvons résoudre le problème du trop grand nombre de dépendances et des paramètres confus
  • <?php
    class container
    {
        public $instance = [];
    
        public function __set($name, $value)
        {
            $this->instance[$name] = $value;
        }
    }
    
    $container = new container();
    
    $container->adapter = new adapter();
    Copier après la connexion

5. Application de l'injection de dépendances
  • Nous définissons d'abord une classe conteneur, qui est principalement utilisée pour injecter les classes que vous souhaitez opérer dans le conteneur
  • Lors de son utilisation, il vous suffit de passer l'objet conteneur

<?php
class container
{
    public $instance = [];

    public function __set($name, $value)
    {
        $this->instance[$name] = $value;
    }
}

class adapter
{
    public $name = &#39;我是调度器&#39;;
}

$container = new container();
$container->adapter = new adapter();

class autofelix
{
    private $container;

    public function __construct(container $container)
    {
        $this->container = $container;
    }

    public function who($class)
    {
        return $this->container->instance[$class]->name;
    }
}

$autofelix = new autofelix($container);

$who = $autofelix->who(&#39;adapter&#39;);

var_dump($who); //我是调度器
Copier après la connexion
6. Optimisation avancée

  • Dans l'application ci-dessus, nous injectons directement l'objet instancié dans le conteneur
  • Cela entraînera l'instanciation de tous les objets avant qu'ils ne soient utilisés, entraînant une consommation de ressources

Nous pouvons passer des fermetures afin que les objets ne soient pas instanciés et injectés. Lorsque vous devez l'utiliser vous-même, l'instanciation peut. réduire la perte de ressources du serveur

<?php
$container = new container();
$container->adapter = new adapter();

//高阶优化
$container = new container();
$container->adapter = function () {
    return new adapter();
};
Copier après la connexion

    Adresse originale : https://juejin.cn/post/7004616671864291359
  • Apprentissage recommandé : "
  • Tutoriel vidéo PHP
  • "

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal