Heim > Artikel > PHP-Framework > Was ist ein Laravel-Container?
Was ist ein Laravel-Container? Was ist der Laravel-Servicecontainer?
In der Laravel-Dokumentation gibt es eine Einführung in den Laravel-Dienstcontainer:
Der Laravel-Dienstcontainer ist ein Tool zum Verwalten von Klassenabhängigkeiten und zur Durchführung der Abhängigkeitsinjektion. Der ausgefallene Begriff „Abhängigkeitsinjektion“ bedeutet im Wesentlichen, dass die Abhängigkeiten einer Klasse über den Konstruktor oder in einigen Fällen über die „Setter“-Methode in die Klasse „injiziert“ werden.
Um die wichtigsten Punkte hervorzuheben: „Laravel Service Container“ ist ein Tool zur Verwaltung von Klassenabhängigkeiten und zur Durchführung der Abhängigkeitsinjektion.
Anhand der entsprechenden Erläuterungen im vorherigen Abschnitt „Grundkonzepte der Abhängigkeitsinjektion“ fällt es uns nicht schwer, eine so einfache Schlussfolgerung zu ziehen, dass „Laravel Service Container“ ein „Abhängigkeitsinjektionscontainer“ ist.
Tatsächlich ist der Service-Container als „Abhängigkeitsinjektionscontainer“ zur Vervollständigung der von Laravel benötigten Registrierung, Bindung und Analyse nur eine der Kernfunktionen des „Laravel-Service-Containers“. Der „Laravel-Service-Container“ spielt auch die Rolle von Funktionen des Registrierungsprozesses für Laravel-Anwendungen.
Auszug aus dem Artikel „Deep Digging into Laravel Life Cycle“ über den Service-Container:
Das Erstellen einer Anwendungsinstanz bedeutet die Instanziierung des IlluminateFoundationApplication-Service-Containers, den wir später den APP-Container nennen werden. Beim Erstellen eines APP-Containers führen Sie hauptsächlich Folgendes durch: Registrieren des Basispfads der Anwendung und Binden des Pfads an den APP-Container, Registrieren des Basisdienstanbieters für den APP-Container, Registrieren des Kerncontainer-Alias für den APP-Container und anderer grundlegender Dienste Registrierungsarbeiten.
Um den Larvel-Servicecontainer zu verstehen, müssen Sie den Konstruktor von IlluminateFoundationApplication studieren:
/** * Create a new Illuminate application instance. * * @see https://github.com/laravel/framework/blob/5.6/src/Illuminate/Foundation/Application.php#L162:27 * @param string|null $basePath * @return void */ public function __construct($basePath = null) { if ($basePath) { $this->setBasePath($basePath); } $this->registerBaseBindings(); $this->registerBaseServiceProviders(); $this->registerCoreContainerAliases(); }
Ja, der Konstruktor der Application-Klasse führt insgesamt 3 Operationen aus:
Registrieren Sie die „App-Instanz (d. h. den Laravel-Service-Container)“ über die Methode „registerBaseBindings()“
Registrieren Sie den Basisdienstanbieter des Laravel-Frameworks über „registerBaseServiceProviders();“
Registrieren Sie den spezifischen „Dependency-Injection-Container“ und seinen Alias beim „Laravel-Service-Container“ über registerCoreContainerAliases(). Die hier erwähnte „Registrierung“ ist letztendlich die Ausführung der „Bind“-Operation des „Laravel-Service-Containers“, um die Bindung der Schnittstelle an die Implementierung abzuschließen. Der Einfachheit halber werfen wir einen Blick auf die Methode registerBaseBindings():/** * Register the basic bindings into the container. 注册 App 实例本身到 App 容器 * * @return void */ protected function registerBaseBindings() { static::setInstance($this); $this->instance('app', $this); $this->instance(Container::class, $this); $this->instance(PackageManifest::class, new PackageManifest( new Filesystem, $this->basePath(), $this->getCachedPackagesPath() )); }Wir wissen, dass die Methode Instanz() die Objektinstanz $this an die App des Containers bindet und Container::class-Schnittstelle. Anschließend ist die durch app()->make('app') oder app()->make(Container::class) erhaltene Implementierungsklasse das $this-Objekt (d. h. die Laravel-Service-Container-Instanz). Informationen zur Verwendung der Instanz finden Sie in der Dokumentation zum Parsen von Laravel-Dienstcontainern. Im Folgenden werde ich jedoch auch entsprechende Verwendungsanweisungen geben. An diesem Punkt glaube ich, dass jeder ein klareres Verständnis von „Laravel Service Container“ hat. Weitere technische Artikel zu Laravel finden Sie in der Spalte
Einführungs-Tutorial zum Laravel-Framework, um mehr darüber zu erfahren!
Das obige ist der detaillierte Inhalt vonWas ist ein Laravel-Container?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!