首页 > 代码库 > yii框架设计学习笔记(一)

yii框架设计学习笔记(一)

阅读提示:

本文章适合和我一样的菜鸟们,事先声明受于见识原因,其中偏驳和遗漏及错误,大家可以置之一笑,但是也欢迎大家指正错误,各位大神大侠

yii是什么?
yii是一款由国人开发的高性能php框架.
yii的构成.
yii其主要思想由桌面开发的事件驱动及组件化开发为基础的框架。
yii的作用.
yii拥有完备的拓展库,以及其自生的特性,使得其非常插拔式的开发方式非常容易被人用来拓展程序,同时其引入了mvc的思想作为其上层开发,便于其他人的开发。
yii高性能的原因
因为其组件化的结构,只有当类真正使用的时候才会被实例化,提高了性能,并且他将cache作为他本身的一个底层特性,大大提高了性能。

分析一个框架,必须找到原始入口,如同win的winmain,这里我随便用yiic初始化一个应用,找到入口文件

yii在这个文件中加载了配置文件,和他的底层框架入口文件Yii.php.

然后又在其中包含一个yiibase.php类,有人会将这个说成是yiibase的一个封装,是一个别名,其实不是这样的,在源码中已经说明了这是一个客户类,是让我们针对自己的项目调整,实现我们个性化,这就是一个适配器模式的典型应用了。

回到入口文件,yii调用了一个静态函数,createWebApplication,裹挟了参数文件.

这个函数中又调用了createApplication,但是将WebApplication作为了一个参数,同时我们发现了一个命令行的程序创建函数,他们都是调用的一个函数,接着我们发现他们分别调用了自己的类,这里又分开了,这里我们已经发现了一种设计模式,工厂模式的应用。

进入WebApplication类,我的第一反应就是找到构造函数,但是文件中却没有,那到那里去了?这里yii使用了php的一个特性,就是当类没有构造函数的时候,他会去调用其父类的构造函数,和c++的面向对象一样,但是不同的是c++还会自己生成一个,不同的是php在有构造函数的时候就不会调用其父类的构造函数,节省了很多的事情,不想c++一样,一层一层向上调,非要穷究其源,同时这里还使用了一个类自动加载机制,不过是直接设置,不知道为什么要这样做。

      回到application,他是一个继承cmodule的类,他首先将yii的setApplication将自己设置为当前应用,然后加载配置文件,同时判定当前的应用目录是否为默认目录,不是就加载自定义目录,接着将给application,webroot,ext三个目录设置别名,接着调用preinit,本文件中没有,在父类中发现是一个空函数,说明这是一个自定义函数,接着加载了yii自身的异常函数,和错误函数,这个函数的名字很有趣,Initsystemhandler,接着便是注册核心组件,这里需要返回上级看具体要加载哪些组件,至于为什么,因为我们实际上是在webapplication函数中,当然调用它的自身重载函数,回到这个webapplication这个类中,他这里有调用了。

 

yii框架设计学习笔记(一)