In diesem Artikel geht es um die Dependency Injection. Studenten, die nicht viel über PHP-Abhängigkeitsinjektion wissen, aber interessiert sind, sollten sich diesen Artikel nicht mehr direkt ansehen !
ist eine Methode, die es uns ermöglicht, uns von hartcodierten Abhängigkeiten zu entkoppeln, damit wir sie ausführen oder kompilieren können Laufzeit- oder Kompilierzeitsoftware, die Entwurfsmuster ändern kann.
Einfach ausgedrückt stellt die Abhängigkeitsinjektion Komponentenabhängigkeiten durch Konstruktorinjektion, Funktionsaufrufe oder Eigenschaftseinstellungen bereit.
Ein System erreicht eine „Kontrollumkehr“, indem es organisatorische Kontrolle und Objekte vollständig trennt . ändern". Für die Abhängigkeitsinjektion bedeutet dies, eine Entkopplung zu erreichen, indem abhängige Objekte an anderer Stelle im System gesteuert oder instanziiert werden.
Zum Beispiel stellt das MVC-Framework normalerweise Superklassen oder grundlegende Controller-Klassen bereit, damit andere Controller die entsprechenden Abhängigkeiten erben können
Da die Vererbung der Basisklasse optional ist, kann diese Methode Abhängigkeiten vollständig entfernen und ist keine Abhängigkeitsinjektion
Das Abhängigkeitsinversionsprinzip ist das „D“ im Objektorientierten Designprinzip S.O.L.I.D., das sich dafür einsetzt, „eher auf Abstraktion zu setzen“. als Konkretheit“. Einfach ausgedrückt sollte die Abhängigkeit eine Schnittstelle/Konvention oder eine abstrakte Klasse sein und nicht eine bestimmte Implementierung.
<?php namespace Database; class Database { protected $adapter; public function __construct(AdapterInterface $adapter) { $this->adapter = $adapter; } } interface AdapterInterface {} class MysqlAdapter implements AdapterInterface {}
Angenommen, Sie arbeiten in einem Team, in dem ein Kollege für die Gestaltung verantwortlich ist Adapter. Im ersten Beispiel müssen wir mit dem Einheitentest warten, bis der Adapter entworfen ist. Da es sich bei der Abhängigkeit nun um eine Schnittstelle/Konvention handelt, können wir den Schnittstellentest leicht nachahmen, da wir wissen, dass unsere Kollegen diesen Adapter basierend auf der Konvention implementieren werden
Der Code wird skalierbarer. Wenn wir uns ein Jahr später für die Migration auf eine andere Datenbank entscheiden, müssen wir nur einen Adapter schreiben, der die entsprechende Schnittstelle implementiert, und diese einbinden. Da der Adapter der Konvention der Schnittstelle folgt, ist kein zusätzliches Refactoring erforderlich.
Verwandte Empfehlungen:
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung der Abhängigkeitsinjektion in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!