在laravel容器中所提到的resolved是什么意思.
/**
* An array of the types that have been resolved.
*
* @var array
*/
protected $resolved = array();
在阅读laravel源码的时候看到的.
位于Illuminate\Container\Container.
请问这个resolved是用来标记对应类型名是否已被解析过吗?
resolved在有道词典中的翻译.
adj. 下定决心的;已解决的;断然的
v. 解决;决定;分解;转变(resolve的过去分词)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
请问这个resolved是用来标记对应类型名是否已被解析过吗?
是啊.
你跟踪下这个变量.
貌似这里就是这个变量在整个框架唯一出现的地方了....
就是一个计数器,没了.
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容器)