Heim > PHP-Framework > Laravel > Hauptteil

Detaillierte Interpretation der Laravel-Fassade

藏色散人
Freigeben: 2020-11-09 15:52:46
nach vorne
2318 Leute haben es durchsucht

Das Folgende ist eine detaillierte Erklärung von Laravel Facade aus der LaravelTutorial-Kolumne. Ich hoffe, dass es Freunden in Not hilfreich sein wird!

Detaillierte Interpretation der Laravel-Fassade

Hallo zusammen, im heutigen Inhalt geht es um das Implementierungsprinzip des Facade-Mechanismus von Laravel.

Einfache Verwendung von Facade

Nutzung der Datenbank:

$users = DB::connection('foo')->select(...);
Nach dem Login kopieren

IOC-Container

Wie wir alle wissen, ist der IOC-Container der wichtigste Teil des Laravel-Frameworks. Es bietet zwei Funktionen: IOC und Container.

  • IOC (Inversion of Control), auch Inversion of Control genannt. Um es ganz klar auszudrücken: Es geht darum, die Generierung von Objekten zu steuern, sodass sich Entwickler nicht darum kümmern müssen, wie die Objekte generiert werden, sondern nur darum, wie sie verwendet werden.
  • Die durch den IOC-Mechanismus generierte Objektinstanz benötigt einen Speicherort für die weitere Verwendung, bei dem es sich um ihre Containerfunktion handelt.

Die konkrete Implementierung des IOC-Containers werde ich dieses Mal nicht erläutern. Es wird später Artikel geben, die dies ausführlich erläutern. In Bezug auf den IOC-Container müssen sich Leser nur zwei Punkte merken:

  1. Objektinstanzen entsprechend der Konfiguration generieren;
  2. Vereinfachte Fassadenklasse
rreee

Codebeschreibung:


$app speichert eine IOC-Containerinstanz, die bei der Initialisierung des Frameworks über die statische Methode setFacadeApplication() festgelegt wird.
  1. Sie implementiert die magische Methode __callStatic.
  2. Die Methode getFacadeAccessor() erfordert, dass Unterklassen eine Zeichenfolgenkennung erben und zurückgeben . Über diesen Bezeichner kann der IOC-Container das Objekt der Klasse zurückgeben, an die er gebunden ist (Framework-Initialisierung oder andere Zeitbindung).
  3. Spezifische Methoden über $instance aufrufen
  4. Erstellen Sie Ihre eigene Fassade:

TEST1 Die spezifische Logik:

<?php
namespace facades;

abstract class Facade
{
    protected static $app;

    /** 
     * Set the application instance.
     *
     * @param  \Illuminate\Contracts\Foundation\Application  $app
     * @return void
     */
    public static function setFacadeApplication($app)
    {   
        static::$app = $app;
    } 

    /** 
     * Get the registered name of the component.
     *
     * @return string
     *
     * @throws \RuntimeException
     */
    protected static function getFacadeAccessor()
    {
        throw new RuntimeException(&#39;Facade does not implement getFacadeAccessor method.&#39;);
    }

    /** 
     * Get the root object behind the facade.
     *
     * @return mixed
     */
    public static function getFacadeRoot()
    {   
        return static::resolveFacadeInstance(static::getFacadeAccessor());
    } 

    /**
     * Resolve the facade root instance from the container.
     *
     * @param  string|object  $name
     * @return mixed
     */
    protected static function resolveFacadeInstance($name)
    {
        return static::$app->instances[$name];
    }

    public static function __callStatic($method, $args)
    {
        $instance = static::getFacadeRoot();

        if (! $instance) {
            throw new RuntimeException(&#39;A facade root has not been set.&#39;);
        }   

        switch (count($args)) {
            case 0:
                return $instance->$method();
            case 1:
                return $instance->$method($args[0]);
            case 2:
                return $instance->$method($args[0], $args[1]);
            case 3:
                return $instance->$method($args[0], $args[1], $args[2]);
            case 4:
                return $instance->$method($args[0], $args[1], $args[2], $args[3]);
            default:
                return call_user_func_array([$instance, $method], $args);
        } 
    }
}
Nach dem Login kopieren

TEST1 Klassenfassade:

<?php
class Test1{
	public function hello()
	{
		print("hello world");
	}}
Nach dem Login kopieren

Verwendung:

<?php
namespace facades;/**
 * Class Test1
 * @package facades
 *
 * @method static setOverRecommendInfo [设置播放完毕时的回调函数]
 * @method static setHandlerPlayer [明确指定下一首时的执行类]
 */class Test1Facade extends Facade{
    protected static function getFacadeAccessor()
    {   
        return &#39;test1&#39;;
    }   }
Nach dem Login kopieren

Erklärung:

facadesTest1Facade Beim Aufruf der statischen Methode hello() wird __callStatic aufgerufen, da diese Methode nicht definiert ist;
  1. in __callStatic , der erste Schritt besteht darin, die entsprechende Instanz abzurufen, d. h. test1
  2. $app in return static::$app->instances[$name];。这其中的 $name,即为 facadesTest1, dem IOC-Container, und der Instanziierungsprozess der Klasse wird von ihm abgewickelt.

Das obige ist der detaillierte Inhalt vonDetaillierte Interpretation der Laravel-Fassade. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage