#下面由Laravel教學專欄給大家介紹Laravel Facade 的詳細解讀,希望對需要的朋友有幫助!
大家好,今天帶來的內容是 Laravel 的 Facade 機制實作原理。
資料庫的使用:
$users = DB::connection('foo')->select(...);
眾所周知,IOC容器是 Laravel 框架的最最重要的部分。它提供了兩個功能,IOC和容器。
這次不準備講解IOC容器的具體實現,之後會有文章詳細解讀它。關於IOC容器,讀者只需要記住兩點即可:
<?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的具體邏輯:
<?php class Test1{ public function hello() { print("hello world"); }}
TEST1 類別的Facade:
<?php namespace facades;/** * Class Test1 * @package facades * * @method static setOverRecommendInfo [设置播放完毕时的回调函数] * @method static setHandlerPlayer [明确指定下一首时的执行类] */class Test1Facade extends Facade{ protected static function getFacadeAccessor() { return 'test1'; } }
使用:
use facades\Test1Facade;Test1Facade::hello(); // 这是 Facade 调用
解釋:
。這其中的
$name,即為
facades\Test1 裡的test1
以上是Laravel Facade 的詳細解讀的詳細內容。更多資訊請關注PHP中文網其他相關文章!