Maison  >  Article  >  développement back-end  >  En savoir plus sur l'injection de dépendances en PHP et voir comment l'appliquer

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

青灯夜游
青灯夜游avant
2021-09-08 19:53:573366parcourir

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();
    }
}

  • 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;
    }
}

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();

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); //我是调度器
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();
};

    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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer