如果类不依赖于任何接口,则无需将类绑定到容器中。不需要指示容器如何构建这些对象,因为它可以使用反射自动解析这些对象。
我不明白。
这是否意味着如果我不使用接口,我就不必在提供者的注册方法中使用任何绑定?
那么,如果我不使用 bindigs,我该如何使用依赖注入呢?
PS:在我的理解中:
“界面” -这是
“绑定” - 是寄存器内的 bind() 和 singelton()
我正在为我的 PHP 网站创建路由器并遇到了这样的方法:
public function getURI() {
if (!empty($_SERVER["REQUEST_URI"])) {
// do some stuff and return the result
}
}
Run Code Online (Sandbox Code Playgroud)
我发现即使我请求'example.com'-$_SERVER["REQUEST_URI"]不是空的(它是'/')
问题是:
为什么我需要检查是否$_SERVER["REQUEST_URI"]为空?
什么时候REQUEST_URI可以空?
我注意到,为了创建外观类,laravel 仅提供名称“db”
框架/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';
}
}
Run Code Online (Sandbox Code Playgroud)
我更深入地研究并发现这个方法使用提供的名称
框架/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];
}
Run Code Online (Sandbox Code Playgroud)
我理解第一个和第二个 If 语句。
但我在理解这一点时遇到了问题:
return static::$resolvedInstance[$name] = static::$app[$name]
Run Code Online (Sandbox Code Playgroud)
据我了解,这$app是类的受保护属性Facade,其中包含类的实例\Illuminate\Contracts\Foundation\Application。
/**
* The application instance being facaded.
*
* @var …Run Code Online (Sandbox Code Playgroud)