Yong
- Yong 回复了 diligentyang 的说说
继续new对象中,还是没有。
如果可以new出来,这行就不会有那么多单身狗了。。。。。。。。。。。。。。。 - Yong 发表了说说一直不看container这个类,这两个星期有空就看两眼,终于大概看明白做了什么
- Yong 赞了评论
没人发现这 get() 有问题?
首先 set() 很简单,经过 normalizeDefinition() 之后,definition 只有3种情况:
1、匿名函数
2、直接对象
3、null / 字符串 / 数组,反正最终都会变成 class 这个键值(否则就出错)再来看 get($class),坑来了,参数 $class 对应的 definition 如果有,对应上面三种情况:
1、call_user_func 可以拿到里面 new 出来的对象(至于这个对象还有依赖,可以 set() 时人为 get() 注入)
2、这个不用说了,直接都是对象了(单例)
3、通过 normalizeDefinition 我们知道,肯定有 class,并且 class 肯定是类名(这个是重点,一定是类名不是吗?!!!)再看 build($class) 干了什么事情:
getDependencies() -> resolveDependencies() -> newInstanceArgs()
直接把 $class 对应的这个类创建了出来,至于依赖,resolveDependencies 里面拿到 $class 构造函数的参数,直接 get 递归,反正到 newInstanceArgs 这一步,构造函数的参数要么是 get() 出来的真实依赖对象,要么是参数的简单类型的默认值。build 干了什么事?它直接产出了可用的真实对象,并且是解决并注入好依赖的!再看看 get() 里干了什么事?为了避免混淆,暂且把 definition 里面的 class 叫做 class,get() 参数第一个参数叫做 alias,它干了这么一件事:
if ($class === $alias) {$object = $this->build($class, $params, $config);
} else {
$object = $this->get($concrete, $params, $config);
}
如果你还没看出坑,那就看流程:get('userLister'),原则上管它递归不递归它都应该是 app\models\UserLister 这个类的对象,难道不是直接 build('app\models\UserLister') ?但是因为 'userLister' !== 'app\models\UserLister',结果逻辑走向了:get('app\models\UserLister'),结果 get() 发现 definition('app\models\UserLister') 不存在,接着又回到了 build('app\models\UserLister'),啥玩意???逗我玩呢???
原文是:http://www.digpage.com/di.html,这篇讲解其实是直接抄过来的(连图都抄没了),图请看原文,你会发现 get('app\models\UserLister') 最终还是走向了 build('app\models\UserLister'),只不过绕了一圈,至于为什么绕,要么是特殊情况,要么是写的人秀逗了?是薛强写的还是别人写的?
- Yong 回复了话题 说说大家多学了那些框架
学什么框架不重要。如果只是底层员工只能听人家说了算,有本事自己说了算才说用啥框架啥东东吧
- Yong 回复了话题 LAMP环境如何在Apache中配置二级域名
分别配置网站根目录就好了
- Yong 发表了说说从来没有用yii2做过项目,就是想看看它的源码,现在看它路由处理和响应处理代码感觉好无聊、不想看。是不是无处实操,没动力?唉!
- Yong 回答了问题 DatePicker日期控件转换格式问题
其实就是text框内容,后台php、前端js都可以做到
- Yong 回答了问题 DatePicker日期控件转换格式问题
http://www.bootcss.com/p/bootstrap-datetimepicker/
http://www.runoob.com/jqueryui/example-datepicker.html
做程序,文档都不去看。。。。。。。。。。。。。。。