Was ist DI-Abhängigkeitsinjektion? Der folgende Artikel vermittelt Ihnen ein tiefgreifendes Verständnis der DI-Abhängigkeitsinjektion in PHP. Ich hoffe, er wird Ihnen hilfreich sein! Was ist DI/Abhängigkeitsinjektion? Für Laien bedeutet dies, dass Sie derzeit eine Klasse betreiben, einige Methoden oder Funktionen dieser Klasse jedoch nicht von dieser Klasse allein, sondern von mit Hilfe einer anderen abgeschlossen werden können Klasse
Das direkteste Zeichen ist, wenn die Parameterdaten als Objekt übergeben werden. Streng genommen möchten Sie eine Klasse in einer anderen Klasse betreiben
. Die Methode zur Übergabe von Parametern heißt injection
php
eine andere Klasse in einer Klasse verwenden muss, werden häufig die folgenden Vorgänge ausgeführt依赖注入DI
其实本质上是指对类的依赖通过构造器完成 自动注入
借助另一个类
的才能完成的想在一个类中操作另一个类
,这两个类之间形成了相互依赖关系,传参的方式叫 注入
php
需要在一个类中使用另一个类的时候,往往都会进行如下操作container
类中需要用到 adapter
类,就需要在使用之前进行实例化耦合度太高
,很容易造成后期的 维护困难
container
脱离不了外部类去工作,这就叫 耦合度太高
<?php class container { private $adapter; public function __construct() { $this->adapter = new adapter(); } }
依赖注入
的出现,主要是为了 解耦合
依赖注入
操作的参数是 对象
,而不是普通参数,是不是有更好的理解了混乱
<?php class container { private $adapter; public function __construct(adapter $adapter) { $this->adapter = $adapter; } }
参数混乱
的问题,这时候,依赖注入进行了优化__get
去设置对象<?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();
容器类
,主要用来向容器中 注入
你想要操作的类对象
即可<?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); //我是调度器
直接
将实例化后的对象注入容器中资源的损耗
传入闭包
,这样对象就不会被实例化而注入,当你自己需要使用的时候,再去实例化,就可以减少 服务器资源的损耗
adapter
in der Klasse >container verwendet werden muss, muss sie vor der Verwendung instanziiert werden. Wenn eine große Anzahl externer Klassen verwendet werden muss, führt dies zu Kopplung. Wenn sie zu hoch ist
, wird es in Zukunft leicht zu Wartungsschwierigkeiten
kommen. Laienhaft ausgedrückt kann container
nicht ohne externe Klassen funktionieren namens Der Kopplungsgrad ist zu hoch
<?php $container = new container(); $container->adapter = new adapter(); //高阶优化 $container = new container(); $container->adapter = function () { return new adapter(); };
Abhängigkeitsinjektion führt code>, hauptsächlich für <code> Entkopplung
🎜🎜Im folgenden Fall müssen wir nur das zu bedienende Klassenobjekt übergeben🎜🎜Dependency Injection
Der Parameter der Operation ist Object
, und es handelt sich nicht um einen gewöhnlichen Parameter. Aber eine so einfache Abhängigkeitsinjektion führt dazu, dass die Übergabe der Parameter sehr lange dauert. Dies ist leicht zu Verwirrung
🎜🎜 rrreee🎜🎜Abhängigkeitsinjektion auf hoher Ebene🎜🎜🎜🎜Um das oben genannte Problem der Parameterverwirrung
zu lösen, verwenden Sie zu diesem Zeitpunkt die Abhängigkeitsinjektion wurde optimiert__get
Gehen Sie und legen Sie das Objekt fest🎜🎜Zu diesem Zeitpunkt können wir das Problem zu vieler Abhängigkeiten und verwirrender Parameter lösen🎜🎜rrreee🎜🎜Anwendung von Abhängigkeitsinjektion🎜🎜🎜🎜Wir definieren zunächst eine Containerklasse
, die hauptsächlich zum injizieren
der Klasse, die Sie betreiben möchten, in den Container verwendet wird das Objekt
des Containers 🎜Dies führt dazu, dass alle Objekte instanziiert werden, bevor sie verwendet werden, was zu einem Ressourcenverlust
führt. 🎜🎜Wir können einen Abschluss übergeben
, sodass das Objekt nicht instanziiert und injiziert wird Sie müssen es selbst verwenden und erneut instanziieren. Sie können den Verlust von Serverressourcen
reduzierenDas obige ist der detaillierte Inhalt vonEin Artikel über DI-Abhängigkeitsinjektion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!