为了便于理解,按YII包里的Demo中的博客项目执行的流程来解析。
YII是单入口形式,项目的所有的访问都通过一个入口文件来进行,index.php:
PHP代码
- <?php
- // change the following paths if necessary
- $yii=dirname(__FILE__).'/../../framework/yii.php';
- $config=dirname(__FILE__).'/protected/config/main.php';
- // remove the following line when in production mode
- // defined('YII_DEBUG') or define('YII_DEBUG',true);
- require_once($yii);
- Yii::createWebApplication($config)->run();
入口文件的内容很简单,包含框架里的yii.php文件和项目的配置文件(一般是项目文件夹下的protected/config/main.php)。Yii继承于YiiBase,YiiBase的最后有这么几行(其中注释是我添加的)
PHP代码
- spl_autoload_register(array('YiiBase','autoload'));//注册__autoload()函数
- require(YII_PATH.'/base/interfaces.php');//引入接口定义
再回到入口文件上,最后一行,顾名思义就是运行WebApp,进入到YiiBase.php,有这些代码:
PHP代码
- public static function createWebApplication($config=null)
- {
- return self::createApplication('CWebApplication',$config);
- }
- public static function createApplication($class,$config=null)
- {
- return new $class($config);
- }
从这些代码可以看出入口文件里的createWebApplication($config)其实是创建了一个新的对象CWebApplication
Yii::createWebApplication($config)->run();等价于执行了CWebApplication($config)->run();
今天至此为止,改天继续。