Typecho 源码分析(3)
前情提要
通过之前我们的分析,我们已经把安装流程搞定了,本篇开始,我们分析前台相关的流程。
正文开始
我们又一次回到了 index.php 在第一篇说完前几行判断是否安装之后,我们就暂时离开了这个文件,当我们安装完以后,进入首页就又回到了这里,我们跳过判断安装那一块,直接看后面。
|
|
别看只有4行,却是大量的精髓都在这边,我们一行一行看。 第一行,初始化组件,我们进入代码
|
|
先看第一个参数 $alias 第一步把传入的变量利用 @ 拆分成两个变量,一个是要初始化的类名,另一个是个别名,如果没有别名的设置,雷德明就是别名。 然后在判断别名池里面有没有这个别名,如果包含了这个别名,类名就变成别名池设置的类名。这个别名池,在这个类下的 alias 方法中可以设置,当前这个方法貌似没有使用。
继续下去,如果组件池里面没有这个实例,就要初始化这个类,先初始化了,request,初始化的时候,会把 get 和 post 参数,设置到 request 的 $_widgetAlias 里面。然后调用了 request 的 setParams 把 widget 方法传入的 params 参数传入,这个方法,会把 params 设置到 request 的 _params 里面。当然,如果传入的 request 参数不是空,则会获取已经存在的 request,不过 request 的 getInstance 方法中不存在 request 实例的话,也会重新初始化一下。
紧接着会根据 $enableResponse 是否为 true 决定,是创建 resposne 或者 Typecho_Widget_Helper_Empty。Typecho_Widget_Helper_Empty 这个类,我们后面再说。
最后,初始化我们传入的 class ,并且执行 execute 方法。最后把 class 实例,放入到组件池当中,并且把组件返回。
好了,现在我们说说初始化的 Widget_Init 类。这个类继承了 Typecho_Widget 类,这个类是个组件根类,这里面封装了不少数据结构,以及 request 、response 之类的东西,这个类,我们在后面用到的时候分别来说再说。初始化 Typecho_Widget 的时候,会传入 request 、resposne 、$params。request 、resposne 会赋值给实例的 request 、resposne。紧接着初始化了 Typecho_Config, 这个类就当做数组看就行了。再把 $params 调用给 Typecho_Config 的 setDefault 方法,设置初始值。
下期预告
紧接着我们看看 Widget_Init 类的 execute 方法。这里面方法也很复杂,我们下期再说。
- 原文作者:M1racle
- 原文链接:https://www.cimple.ink/2019/11/13/typecho-source-code-analysis-3/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。