Yii源码阅读心得(持续更新)

今天开始阅读Yii的源码,想深入了解一下Yii的工作原理,同时学习一下优秀的编码规范和风格。在次记录一下阅读中的小心得。

就从Yii自动生成的网站入口开始吧。

 

index.php

    整个网站的入口,主要对一些路径和参数的配置,并启动web应用。

1 $yii=dirname(__FILE__).'/../yii/framework/yii.php';
2 $config=dirname(__FILE__).'/protected/config/main.php';
3 
4 defined('YII_DEBUG') or define('YII_DEBUG',true);
5 // specify how many levels of call stack should be shown in each log message
6 defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
7 
8 require_once($yii);
9 Yii::createWebApplication($config)->run();
    第4行短路语句的形式会经常用到:如果已经定义了Yii_DEBUG, 则or后面的语句将不会执行。

    第8行将yii框架的内容包含进来,那么顺着执行流程去看看yii.php。

 

yii.php

1 require(dirname(__FILE__).'/YiiBase.php');
2 
3 class Yii extends YiiBase{}

    这个文件很简单,只有两行,其实是一个框架功能的辅助类,用户可以编写自己的Yii类来定制YiiBase的相关功能。

    注:dirname(__FILE__)指当前文件的绝对路径,这要写要比../便于维护。

 

YiiBase.php

    YiiBase类为Yii框架提供了公共的基础功能,如:

    别名管理和对象创建管理

 

    这里有一个地方值得注意,即系统分隔符的使用,如下:

defined('YII_ZII_PATH') or define('YII_ZII_PATH',YII_PATH.DIRECTORY_SEPARATOR.'zii');

    因为windows下是'\',linux下是'/',用DIRECTORY_SEPARATOR就能很好地解决。

    还有一个很巧妙地实现singleton的地方,可以将空的$_app赋值,也可以将非空$_app删除,即赋为null:

1 public static function setApplication($app)
2     {
3         if(self::$_app===null || $app===null)
4             self::$_app=$app;
5         else
6             throw new CException(Yii::t('yii','Yii application can only be created once.'));
7     }

    

    

 

   

 

 

  

  

posted @ 2012-05-10 11:40  hi_bazinga  阅读(3031)  评论(0编辑  收藏  举报