Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erklärung der Abhängigkeitsinjektion in PHP

Detaillierte Erklärung der Abhängigkeitsinjektion in PHP

韦小宝
韦小宝Original
2018-03-14 12:44:112714Durchsuche

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 !

Abhängigkeitsinjektion

Verständnis:

  1. 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.

  2. Einfach ausgedrückt stellt die Abhängigkeitsinjektion Komponentenabhängigkeiten durch Konstruktorinjektion, Funktionsaufrufe oder Eigenschaftseinstellungen bereit.

Kontrollumkehr

Verständnis:

  • 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

Hinweis

  • Da die Vererbung der Basisklasse optional ist, kann diese Methode Abhängigkeiten vollständig entfernen und ist keine Abhängigkeitsinjektion

Abhängigkeitsinversion

Verstehen Sie:

  • 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.

Beispiel:

<?php
namespace Database;

class Database
{
    protected $adapter;

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

interface AdapterInterface {}

class MysqlAdapter implements AdapterInterface {}

Vorteile:

  • 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:



Detaillierte Erläuterung des Abhängigkeitsinjektionsprozesses der PHP-Klassenreflexionsimplementierung

Detaillierte Erläuterung der Methode der automatischen Abhängigkeitsinjektion in PHP basierend auf dem Reflexionsmechanismus

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn