php - 在laravel容器中所提到的resolved是什么意思.
怪我咯
怪我咯 2017-04-10 14:52:46
[PHP讨论组]
/**
 * An array of the types that have been resolved.
 *
 * @var array
 */
protected $resolved = array();

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

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

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

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
PHP中文网

请问这个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而存在的?

ringa_lee

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号