刚开了个头,就被一个新项目打断了,现在继续学习。
一堆继承之后,WebApplication对象终于开始实例化了。实例化实际是在CApplication中定义的.
实例化过程
1.首先进行了Yii::setApplication().这个方法主要是为了确保Application是一个单例。这里将CWebApplication对象传入Yii对象的一个静态的成员变量。
2.设置根目录。由于我们在构造函数调用时,并未传入任何配置,所以将使用默认的配置“protected”.“protected”字符经过realpath的处理后指向hello world下的protected目录。之后又对application webroot ext三个别名赋值该路径。
3.preinit.这个主要用于继承类在实例化前进行一些其他的处理和扩展。不过我们的CWebApplication并没有进行补充。
4.initSystemHandlers。初始化异常和错误处理句柄的autoloader
5.registerCoreComponents.注册核心组件。将父类CApplication中的核心注册之后,CWebApplication本身注册了session、assetManager、user、themeManager、authManager、clientScript五个组件。从名字上也基本能看出各个组件的功能。注册组件是CModule中的setComponents实现的,实现过程是将这些组件名作为键值,组件的类名及路径写入value,存储在$_componentConfig中。
6.configure.根据传入的参数进行一些配置。本例中无配置。在函数体中可以看出,config的键名是对象的一个成员变量,值作为该变量值。可配置的程度较大。
7.attachBehaviors.根据参数配置创建若干个继承自IBehavior的behavior对象作为组件。本例中没有配置,暂不深究
8.preloadComponents.预加载组件。由于在之前的初始化过程中并未对$this->preload进行配置,所以没有什么组件需要预加载的了。
9.init.经过了这些个预处理和配置之后,终于看到了init了
986

被折叠的 条评论
为什么被折叠?



