Laravel ist ein beliebtes PHP-Framework, das das Designmuster der Abhängigkeitsinjektion übernimmt. Dependency Injection, kurz DI, ist ein Entwurfsmuster, das die Kopplung zwischen Code reduziert, indem Abhängigkeiten an Objekte übergeben werden, anstatt sie von den Objekten selbst erstellen oder nachschlagen zu lassen.
Wenn in nicht objektorientiertem, nicht DI-Code ein Objekt benötigt wird, müssen wir normalerweise die zum Erstellen des Objekts erforderliche Klasse im Code finden und durch Instanziieren der Klasse einen Verweis auf das Objekt erhalten. Bei diesem Ansatz gibt es viele Probleme, darunter:
Durch das DI-Entwurfsmuster können wir die Instanziierung komplexer Klassen zur Verwaltung an das Framework übergeben und uns vom Framework dabei helfen lassen, Objekte zu erstellen und Abhängigkeiten einzufügen, wodurch die oben genannten Probleme leicht gelöst werden können. Im Laravel-Framework wird DI über das Service-Container-Muster implementiert.
Der Service-Container ist ein von Laravel bereitgestelltes Tool zum Verwalten von Klassenabhängigkeiten. Wir können die Abhängigkeitsinjektion über den Service-Container implementieren. Der Service-Container verwaltet intern eine Liste von Objektinstanzen, die während des gesamten Anwendungslebenszyklus Dienste bereitstellen. Dadurch können Objektimplementierungen wiederverwendet werden, das Problem der wiederholten Erstellung vermieden und gleichzeitig die Beziehung zwischen Objekten besser entkoppelt werden.
In Laravel ist die Definition eines Dienstanbieters der erste Schritt zur Implementierung der Abhängigkeitsinjektion. Ein Dienstanbieter ist eine Klasse, die eine Klasse, Schnittstelle oder ein beliebiges Objekt in Ihrer Anwendung registriert und sie für die Abhängigkeitsinjektion im Konstruktor eines Abschlusses oder Controllers verfügbar macht.
Der Dienstanbieter muss IlluminateSupportServiceProvider erben. In der Methode register() können wir die Methode bind() verwenden, um eine Klasse oder Schnittstelle an den Servicecontainer zu binden. Wenn wir eine instanziierte Klasse benötigen, erstellt der Servicecontainer automatisch eine Instanz basierend auf unserer Definition und gibt sie zurück.
Zum Beispiel erstellen wir eine Klasse namens Foo und registrieren sie im Service-Container. Wenn Sie die Klasse im Controller aufrufen, müssen Sie nur im Konstruktor auf die Klasse verweisen, damit der Dienstcontainer automatisch eine Instanz der Foo-Klasse einfügt.
use App\Services\Foo; ... class MyController extends Controller { public function __construct(Foo $foo) { $this->foo = $foo; } public function index() { return $this->foo->doSomething(); } }
Im obigen Beispiel wird im Konstruktor des Controllers auf die Foo-Klasse verwiesen, und der Servicecontainer erstellt automatisch eine Instanz der Foo-Klasse und fügt sie in den Konstruktor der MyController-Klasse ein. Wir können die Instanzmethode aufrufen nach Belieben, Abhängigkeitsinjektionsfunktion realisieren.
Zusätzlich zur Methode bind() kann der Dienstanbieter auch die Methode singleton() verwenden, um ein Objekt an den Dienstcontainer zu binden. Das Objekt wird nur einmal für die gesamte Anwendung erstellt und vom gesamten Code gemeinsam genutzt.
Kurz gesagt, die Abhängigkeitsinjektion ist zu einem unverzichtbaren Bestandteil des modernen PHP-Entwicklungsprozesses geworden. Der Service-Container-Mechanismus von Laravel macht die Abhängigkeitsinjektion eleganter, vereinfacht den Code und ermöglicht es Programmierern, sich mehr auf die Implementierung von Geschäftsfunktionen zu konzentrieren. Die Beherrschung der Verwendung von Laravel-Servicecontainern kann uns helfen, effizienten und wartbaren PHP-Code zu schreiben.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Abhängigkeitsinjektion in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!