Laravel服务提供商和服务容器

时间:2016-09-04 03:31:55

标签: php laravel

在laravel中访问查询,我们使用DB外观

DB::select()

来自alanstorm网站http://alanstorm.com/binding_objects_as_laravel_services我了解到DB外观使用callstatic方法导致DB::app['db']->select(). app是laravel服务容器对象,所有服务绑定到它中。我使用vardump php方法var_dump(app['db']),我看到服务容器返回一个Illuminate \ Database \ DatabaseManager对象。从实现 ConnectionResolverInterface DatabaseManager 类中,我看不到那里定义的select方法。我想问一下app [' db']如何访问select方法。

之前谢谢

1 个答案:

答案 0 :(得分:1)

DatabaseManager类实现了__call()方法 如果你在该类上调用一个不存在的方法,它会立即作为参数传递给__call(),这是php的魔法之一methods

使用您传递的方法调用连接类。

这里是Illuminate \ Database \ DatabaseManager

中的方法实现
/**
 * 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);
}