laravel facade如何同时使用DB和DB instance?

How laravel facade can use DB and DB instance at the same time?

我使用 DB facade。我看到它可以在 Illuminate\Database\DatabaseManager 中的 DB::connection 和 Illuminate\Database\Connection 中的 DB::select 中使用。

不明白一个门面怎么可以套两个服务?

感谢您的提问!

一个 Facade 可以针对不同的方法指向多个 classes。这可以通过魔术方法 __call.

这是 DatabaseManager class 的 __call 方法:

 /**
 * Dynamically pass methods to the default connection.
 *
 * @param  string  $method
 * @param  array   $parameters
 * @return mixed
 */
public function __call($method, $parameters)
{
    return $this->connection()->$method(...$parameters);
}

DB 外观指向 DatabaseManager class,如果未找到该方法,DatabaseManager 则将调用转发给 Connection class.