ホームページ >PHPフレームワーク >Laravel >Laravel Facadeの詳細な解釈
以下は、Laravel チュートリアル コラムからの Laravel Facade の詳細な説明です。 . 困っている方のお役に立てれば幸いです!
皆さんこんにちは。今日の内容はLaravelのFacade機構の実装原理についてです。
データベースの使用:
$users = DB::connection('foo')->select(...);
ご存知のとおり、IOC コンテナは、 Laravel フレームワーク。 IOC とコンテナという 2 つの機能を提供します。
今回は IOC コンテナの具体的な実装については説明しません。後で詳しく説明した記事があります。 IOC コンテナに関して、読者は 2 つの点だけを覚えておく必要があります:
<?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); } } }
コードの説明:
<?php class Test1{ public function hello() { print("hello world"); }}
TEST1 クラスのファサード:
<?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 调用
説明:
facades\Test1Facade は静的メソッド hello () を呼び出します。このメソッドは次のとおりです。定義されていない場合、__callStatic が呼び出されます;$name
は、IOC コンテナである facades\Test1
の test1
$app であり、クラスのインスタンス化プロセスはそれに渡されます。ハンドル。 以上がLaravel Facadeの詳細な解釈の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。