【问题标题】: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。基本上是这样工作的:

    1. 对 Facade 类的静态调用 (DB::connection())
    2. Facade 类使用__callStatic 捕获该静态调用
    3. 它获取底层类的实际实例 (DatabaseManager)
    4. 原始调用作为非静态调用转发给实例 ($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 {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-29
      • 2018-03-26
      • 2015-04-30
      • 1970-01-01
      • 2017-06-09
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多