首页 > 后端开发 > php教程 > 在laravel容器中所提到的resolved是什么意思.

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

WBOY
发布: 2016-06-06 20:44:34
原创
1637 人浏览过

<code class="lang-php">/**
 * An array of the types that have been resolved.
 *
 * @var array
 */
protected $resolved = array();

</code>
登录后复制
登录后复制

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

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

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

回复内容:

<code class="lang-php">/**
 * An array of the types that have been resolved.
 *
 * @var array
 */
protected $resolved = array();

</code>
登录后复制
登录后复制

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

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

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

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

是啊.

你跟踪下这个变量.

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

    $this->resolved[$abstract] = true;
</code>
登录后复制

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

就是一个计数器,没了.

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

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

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

我们知道,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容器)

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板