在laravel容器中所提到的resolved是什么意思.

发布于 2022-08-29 17:49:59 字数 373 浏览 29 评论 0

/**
 * An array of the types that have been resolved.
 *
 * @var array
 */
protected $resolved = array();

在阅读laravel源码的时候看到的.
位于Illuminate\Container\Container.

请问这个resolved是用来标记对应类型名是否已被解析过吗?

resolved在有道词典中的翻译.
adj. 下定决心的;已解决的;断然的
v. 解决;决定;分解;转变(resolve的过去分词)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清风不识月 2022-09-05 17:49:59

请问这个resolved是用来标记对应类型名是否已被解析过吗?

是啊.

你跟踪下这个变量.

public function make($abstract, $parameters = array())
{
    $abstract = $this->getAlias($abstract);

    $this->resolved[$abstract] = true;

貌似这里就是这个变量在整个框架唯一出现的地方了....

就是一个计数器,没了.

View::make(...), App::make('foo')

$resolved = array('view'=>true,'foo'=>true);

估计为了方便debug而存在的?

独享拥抱 2022-09-05 17:49:59

我们知道,Laravel里面存在着大量的Facade用法,比如你一开始写的router,Router::get() ,你知道为啥可以这样写吗?Router::get() 其实等价于$app->make('router')->get(); $app->make('router') 就是一个很形象的ioc容器, $app->make()就是容器,'router'就是放进去解析的类(的别名),$app->make('router') 就可以把 Route类的一个实例解析出来。

你可能要问,为啥要解析呢?解析是什么意思呢?我New 一下那个类不就可以得到实例了吗?首先,如果你把一个类绑定到Ioc的容器后,它可以自动帮你生成实例,不用include,不用new。其次new 一个类不能直接帮你解析出它依赖的类,特别是接口类,用new的方法你需要先用new创建实例,然后再传入这个类依赖的实例(意味着有更多的new)。

详细请看:Service Container(IOC容器)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文