Heim >PHP-Framework >Laravel >Detaillierte Interpretation der Laravel-Fassade
Das Folgende ist eine detaillierte Erklärung von Laravel Facade aus der LaravelTutorial-Kolumne. Ich hoffe, dass es Freunden in Not hilfreich sein wird!
Hallo zusammen, im heutigen Inhalt geht es um das Implementierungsprinzip des Facade-Mechanismus von Laravel.
Nutzung der Datenbank:
$users = DB::connection('foo')->select(...);
Wie wir alle wissen, ist der IOC-Container der wichtigste Teil des Laravel-Frameworks. Es bietet zwei Funktionen: IOC und Container.
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:
<?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('Facade does not implement getFacadeAccessor method.'); } /** * 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('A facade root has not been set.'); } 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); } } }
TEST1 Klassenfassade:
<?php class Test1{ public function hello() { print("hello world"); }}
Verwendung:
<?php namespace facades;/** * Class Test1 * @package facades * * @method static setOverRecommendInfo [设置播放完毕时的回调函数] * @method static setHandlerPlayer [明确指定下一首时的执行类] */class Test1Facade extends Facade{ protected static function getFacadeAccessor() { return 'test1'; } }
Erklärung:
facadesTest1Facade Beim Aufruf der statischen Methode hello() wird __callStatic aufgerufen, da diese Methode nicht definiert ist;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!