【问题标题】:Laravel 5 Connection Code MeaningLaravel 5 连接代码含义
【发布时间】:2015-01-27 19:20:45
【问题描述】:
我已经使用下面的代码行并且它工作正常我知道getDatabaseName()是连接类的成员函数但我想知道DB::connection()的含义是什么意思是否用于创建连接类的对象还是别的什么?
DB::connection()->getDatabaseName(); // Meaning of this Line
getDatabaseName() // function of connection class [Clear to Me]
DB::connection() // it is confusing what does it mean
【问题讨论】:
标签:
php
laravel
laravel-4
laravel-5
【解决方案1】:
DB 是一个 Laravel Facade。基本上是这样工作的:
- 对 Facade 类的静态调用 (
DB::connection())
- Facade 类使用
__callStatic 捕获该静态调用
- 它获取底层类的实际实例 (
DatabaseManager)
- 原始调用作为非静态调用转发给实例 (
$db->connection())
让我们看一些源代码
Illuminate\Support\Facades\Facade
public static function __callStatic($method, $args)
{
$instance = static::getFacadeRoot();
// method content simplified for brevity
return call_user_func_array(array($instance, $method), $args);
}
getFacadeRoot() 本质上返回实际实例。来自全局 Application IoC Container 或来自外观本身的变量(如果您第二次使用它)
然后call_user_func_array用于在实例上调用原始方法$method。
如果您想知道哪个门面解析到哪个类,您可以使用this reference 或转到源中的门面类并在该类的文档块中搜索@see:
/**
* @see \Illuminate\Database\DatabaseManager
* @see \Illuminate\Database\Connection
*/
class DB extends Facade {