Maison > Article > développement back-end > Comprendre simplement l'injection de dépendances DI en PHP
Cet article vous apporte des connaissances pertinentes sur PHP, qui présente principalement des problèmes liés à l'injection de dépendances. L'injection de dépendances DI fait en fait référence à l'injection automatique de dépendances sur les classes via des constructeurs. Parlons-en ensemble, j'espère que cela vous aidera. tout le monde.
(Tutoriel recommandé : Tutoriel vidéo PHP)
Dependency Injection DI signifie en fait essentiellement que les dépendances d'une classe sont automatiquement injectées via le constructeur
En termes simples, il est Vous utilisez actuellement une classe, mais certaines méthodes ou fonctions de cette classe ne peuvent pas être complétées par cette classe seule, mais doivent être complétées avec l'aide d'une autre classe. Le signe le plus direct est que les données du paramètre sont transmises en tant qu'objet. quand. À proprement parler, vous souhaitez faire fonctionner une classe dans une autre classe. Il existe une interdépendance entre les deux classes. La méthode de transmission des paramètres est appelée injection
La raison pour laquelle l'injection de dépendances apparaît
Par exemple, si je dois utiliser la classe adaptateur dans la classe conteneur, elle doit être instanciée avant utilisation
Si un grand nombre de classes externes doivent être utilisé, cela entraînera un degré de couplage trop élevé, ce qui peut facilement entraîner des difficultés de maintenance ultérieures
En 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(); } }
Injection de dépendance simple
Dans le cas suivant, il suffit de passer l'objet de classe qui a besoin à utiliser
Le paramètre de l'opération d'injection de dépendances est l'objet. Au lieu des paramètres ordinaires, avez-vous une meilleure compréhension
Mais une injection de dépendances aussi simple entraînera si vous dépendez de beaucoup de classes, ce sera très longtemps lorsque vous transmettez des paramètres, et il sera facile de se tromper
<?php class container { private $adapter; public function __construct(adapter $adapter) { $this->adapter = $adapter; } }
Injection de dépendances de haut niveau
Grâce à la méthode magique, __arriver à définir 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(); $container->autofelix = new autofelix();
Application d'injection de dépendances
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 = '我是调度器'; } $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('adapter'); var_dump($who); //我是调度器
Optimisation de haut niveau par injection de dépendances
Cela entraînera tous les objets à être instancié avant d'être utilisé, entraînant une perte de ressources
Nous pouvons passer des fermetures, de cette façon, l'objet ne sera pas instancié et injecté Lorsque vous aurez besoin de l'utiliser, vous pourrez l'instancier à nouveau, ce qui 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(); };
(Tutoriel recommandé :
Tutoriel vidéo PHPCe 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!