Heim  >  Artikel  >  PHP-Framework  >  Der Unterschied zwischen Laravel-Fassade und Dienstleister

Der Unterschied zwischen Laravel-Fassade und Dienstleister

藏色散人
藏色散人Original
2019-08-06 11:16:042541Durchsuche

Der Unterschied zwischen Laravel-Fassade und Dienstleister

Der Unterschied zwischen Laravel-Fassadenmodus und Dienstanbieter

Nehmen Sie Laravels eigenes Dateisystem als Beispiel in config Im Provider-Array der Konfigurationsdatei von /app.php ist ein Dienstanbieter registriert:

Illuminate\Filesystem\FilesystemServiceProvider::class,

Eine Fassade ist im Alias-Array definiert:

‘File’ => Illuminate\Support\Facades\File::class,

Durch diese beiden Schritte werden wir Es ist sehr praktisch, die von Laravel bereitgestellten dateisystembezogenen Vorgänge zu verwenden, und das Aufrufformular ist sehr einfach, wie zum Beispiel:

File::exist ($path),判断文件是否存在。
File::get ($path, $lock = false),获取一个文件的内容。
File::append ($path, $data),把内容追加到一个文件末尾。
File::files ($directory),获取一个目录下所有文件。

Wie wird das gemacht? Lassen Sie uns über den Dienstanbieter und den Fassadenmodus von Laravel sprechen.

Dienstanbieter

Schauen wir uns zunächst die Definition an:

Dienstanbieter ist das Zentrum, in dem alle Laravel-Anwendungen gestartet werden. Alle Kerndienste von Laravel, einschließlich Ihrer eigenen Anwendungen, werden über Dienstanbieter gestartet.

Im Dateisystemdienstanbieter kann die Registermethode am Standort /vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemServiceProvider.php erkennen, dass ein Singleton gebunden ist:

protected function registerNativeFilesystem()
{
    $this->app->singleton('files', function () {
        return new Filesystem;
    });
}

Dieser Singleton ist der Singleton-Modus der Dateisystemklasse. Natürlich kann dieser Dienstleister auch andere Singletons binden oder noch mehr erledigen. Wir untersuchen hier nur das Prinzip der Aufrufmethode File::exist().

Auf diese Weise gibt es eine einzelne Instanz von Dateien, die eigentlich eine Instanz der Filesystem-Klasse ist.

Wenn zu diesem Zeitpunkt keine Fassade vorhanden ist, können Sie auch die Methode der Dateisysteminstanz aufrufen, also wie folgt aufrufen:

app(‘files’)->exist($path)

Okay, jetzt reden wir über die Fassade .

Facade Fassadenmuster

Werfen wir zunächst einen Blick auf die Einleitung:

Facades /fəˈsäd/ stellt eine „statische“ Schnittstelle für verfügbare Klassen zur Verfügung im Servicecontainer der Anwendung. Laravel verfügt über viele Fassaden, über die auf fast alle Dienste zugegriffen werden kann. Laravel-Fassaden sind „statische Proxys“ für Basisklassen im Service-Container. Im Vergleich zu herkömmlichen statischen Methodenaufrufen bieten Fassaden eine einfachere und umfangreichere Syntax und weisen gleichzeitig eine bessere Testbarkeit und Skalierbarkeit auf.

Am Anfang dieses Artikels haben wir erwähnt, dass das Alias-Array eine Datei definiert. Die spezifische Klasse ist

Illuminate\Support\Facades\File::class,

Es gibt tatsächlich a zurück Name Hinweis Ist dieser Dateiname nicht der Name des gerade gebundenen Singleton-Musters? Das ist richtig.

Auf diese Weise können Sie den Dateialias oder die Dateifassade verwenden, um Methoden in dieser Dateisysteminstanz aufzurufen.

Ich hoffe, dass Sie durch diesen Artikel die Beziehung zwischen Dienstanbietern, Facade und Instanzen der tatsächlich aufgerufenen Klassen verstehen können.

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 vonDer Unterschied zwischen Laravel-Fassade und Dienstleister. 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
Vorheriger Artikel:Was ist ein Laravel-Container?Nächster Artikel:Was ist ein Laravel-Container?