YII架构与流程简单剖析

 为了便于理解,按YII包里的Demo中的博客项目执行的流程来解析。

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

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注