Laravel 5连接代码含义

时间:2015-01-27 19:20:45

标签: php laravel laravel-4 laravel-5

我使用了以下代码行并且工作正常我知道getDatabaseName()是Connection类的成员函数但我想知道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

1 个答案:

答案 0 :(得分:4)

DB是Laravel Facade。基本上这样工作:

  1. 静态调用Facade类(DB::connection()
  2. Facade类使用__callStatic
  3. 捕获静态调用
  4. 它获取基础类(DatabaseManager
  5. 的实际实例
  6. 原始呼叫作为对实例($db->connection()
  7. 的非静态调用转发

    让我们看看一些源代码

    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


    如果您想知道哪个Facade解析为哪个类可以使用this reference,或者转到源代码中的Facade类并在类的docblock中搜索@see

    /**
     * @see \Illuminate\Database\DatabaseManager
     * @see \Illuminate\Database\Connection
     */
    class DB extends Facade {