那么在浏览器中输入 localhost/bootstrap/index.php时 yii都做为我们做了一些什么咧
首先 我们来看index.php文件,这是yii应用的唯一入口
01 | //定义yii的引导文件,里面定义了一个叫Yii的类 |
02 | $yii =dirname( __FILE__ ). '/../yii/framework/yii.php' ; |
03 | //定义web应用的配置文件 |
04 | $config =dirname( __FILE__ ). '/protected/config/main.php' ; |
05 | //开发模式下开启debug调试 |
06 | // remove the following lines when in production mode |
07 | defined( 'YII_DEBUG' ) or define( 'YII_DEBUG' ,true); |
08 | // specify how many levels of call stack should be shown in each log message |
09 | defined( 'YII_TRACE_LEVEL' ) or define( 'YII_TRACE_LEVEL' ,3); |
10 | //导入Yii的引导文件 |
11 | require_once ( $yii ); |
12 | //创建应用并初始化配置文件,运行应用 |
13 | Yii::createWebApplication( $config )->run(); |
那么createWebApplication方法主要是做写什么事情咧,我们去Yii的类里面看看
我们看到,Yii是调用了自身的另外一个静态方法createApplication,并且传递了配置文件参数$config
1 | public static function createWebApplication( $config =null) |
2 | { |
3 | return self::createApplication( 'CWebApplication' , $config ); |
4 | } |
我们接着往下看,发现Yii在createApplication方法里面返回了一个
CWebApplication 类的实例化对象,并在构造函数时传递了配置文件参数
1 | public static function createApplication( $class , $config =null) |
2 | { |
3 | return new $class ( $config ); |
4 | } |
似乎想知道发生了什么,还得进入
CWebApplication的构造函数里面看看,那么我们去看看
1 | public function __construct( $config =null) |
2 | { |
3 | //将创建的webapp实例赋值给Yii的静态属性$app,在整个进程中可以使用Yii::app()来使用这个应用对象,这是一个单例模式 |
4 | Yii::setApplication( $this ); |
5 | ...... |
6 | } |
我们看到,在构造函数的第一步,调用了Yii的setApplication方法,并传递了实例化出来的CWebApplication对象,我们进入Yii的这个静态方法可以看到,Yii将创建出来的app对象赋值给了Yii的私有的静态属性$_app;
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 | } |
在Yii中我们又看到了这样的公共静态方法,在app()方法中,返回了它的私有静态属性$_app也就是CWebApplication对象
1 | public static function app() |
2 | { |
3 | return self:: $_app ; |
4 | } |
所以在接下来的页面的任何地方,我们都可以调用Yii::app()来访问CWebApplication对象,并且它是个单例对象。
http://my.oschina.net/lonxom/blog/168227