加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Yii2中组件的注册与建设要领

发布时间:2021-03-22 23:46:38 所属栏目:编程 来源:网络整理
导读:本日原来规划研究一下yii2.0的AR模子的实现道理,然而,打算赶不上变革,溘然就想先研究一下yii2.0的数据库组件建设的进程。通过对yii源码的进修,相识了yii组件注册与建设的进程,并发明原本yii组件注册之后并不是顿时就去建设的,而是待到现实必要行使某个

  搞了半天,原本yii建设应用实例的时辰只是举办组件的注册,并没有现实建设组件,那么组件实例是什么时辰举办建设的?在那边举办建设的呢?别急。从上面推导的这个进程我们知道yiidiServiceLocator类是yiiwebApplication类的祖先类,以是着实yii的应用实例着实就是一个处事定位器,好比我们想会见数据库组件的时辰,我们可以这样来会见:Yii::$app->db,这个Yii::$app就是yii应用实例,也就是yiiwebApplication类的实例,可是yiiwebApplication类和它的父类、祖先类都找不到db这个属性啊。哈哈,别忘了,php读取不到类属性的时辰会挪用把戏要领__get(),以是开始查找yiiwebApplication担任相关最近的祖先类中的__get()要领,最后在yiidiServiceLocator类中找到了,也就是说,Yii::$app->db最终会挪用yiidiServiceLocator类中的__get()要领:

has($name)) { return $this->get($name); } else { return parent::__get($name); } }

__get()要领起首挪用has()要领(这个不再贴代码了)判定组件是否已注册,若已注册则挪用get()要领:

_components[$id])) { return $this->_components[$id]; } if (isset($this->_definitions[$id])) { $definition = $this->_definitions[$id]; if (is_object($definition) && !$definition instanceof Closure) { return $this->_components[$id] = $definition; } else { return $this->_components[$id] = Yii::createObject($definition); } } elseif ($throwException) { throw new InvalidConfigException("Unknown component ID: $id"); } else { return null; } }

个中私有成员变量$_components是存储已经建设的组件实例的,若发明组件已经建设过则直接返回组件示例,不然行使$_definitions中对应组件的注册信息,挪用yiiBaseYii::createObject()要领举办组件建设,这个要领最终会挪用依靠注入容器yiidiContainer的get()要领,接着就是依靠注入建设工具的进程了,关于这个进程已经在我的上一篇博文中讲授过了,可以参考一下:yii2之依靠注入与依靠注入容器。

  好了,yii组件注册与建设的整个进程就是这样的。最后总结一下,着实yii建设应用实例的时辰只是举办了各个组件的注册,也就是将组件的设置信息存入yiidiServiceLocator类的私有成员变量$_definitions中,并没有举办现实建设,比及措施运行进程中真正必要行使到某个组件的时辰才按照该组件在$_definitions中生涯的注册信息行使依靠注入容器yiidiContainer举办组件实例的建设,然后把建设的实例存入私有成员变量$_components,这样下次会见沟通组件的时辰就可以直接返回组件实例,而不再必要执行建设进程了。yii的这个组件注册与建设机制着实是大有裨益的,试想一下,假如在应用实例建设的时辰就举办全部组件的建设,将会大大增进应用实例建设的时刻,用户每次革新页面城市举办应用实例的建设的,也就是说用户每革新一次页面都很慢,这用户体验就很欠好了,并且许多环境下有许多组件着实是没有行使到的,可是我们照旧花了不少时刻去建设这些组件,这是很不明智的,以是yii的做法就是:先把组件参数信息生涯起来,必要行使到哪些组件再去建设响应的实例,大大节减了应用建设的时刻,同时也节减了内存,这种思绪是很值得我们进修的!

总结

以上所述是小编给各人先容的Yii2中组件的注册与建设要领,但愿对各人有所辅佐。措施员碰着题目城市上(编程之家52php.cn)查找题目解答要领!假如认为站点还不错,顺手转发给措施员伴侣一下!

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读