【发布时间】:2018-11-04 22:37:09
【问题描述】:
我注意到,为了创建外观类,laravel 仅提供名称“db”
framework/src/Illuminate/Support/Facades/DB.php
class DB extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'db';
}
}
我看了更深,发现这个方法使用了提供的名称
framework/src/Illuminate/Support/Facades/Facade.php
protected static function resolveFacadeInstance($name)
{
if (is_object($name)) {
return $name;
}
if (isset(static::$resolvedInstance[$name])) {
return static::$resolvedInstance[$name];
}
return static::$resolvedInstance[$name] = static::$app[$name];
}
我理解第一个和第二个 If 语句。
但我在理解这一点上有问题:
return static::$resolvedInstance[$name] = static::$app[$name]
据我了解,$app 是 Facade 类的受保护属性,其中包含 \Illuminate\Contracts\Foundation\Application 类的实例。
/**
* The application instance being facaded.
*
* @var \Illuminate\Contracts\Foundation\Application
*/
protected static $app;
我的两个问题:
如果 Application 类不扩展 ArrayObject 类,如何将对象用作数组(static::$app[$name])?
laravel 如何通过只提供一个短名称“db”来理解要调用哪个类?
【问题讨论】: