Yii框架文摘之二yii的入口与app应用实例(Yii::app())

那么在浏览器中输入 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值