您的位置:首页 > 移动开发

二、yii的入口与app应用实例(Yii::app())

2014-08-07 16:39 330 查看
那么在浏览器中输入 localhost/bootstrap/index.php时 yii都做为我们做了一些什么咧

首先 我们来看index.php文件,这是yii应用的唯一入口

//定义yii的引导文件,里面定义了一个叫Yii的类
$yii=dirname(__FILE__).'/../yii/framework/yii.php';
//定义web应用的配置文件
$config=dirname(__FILE__).'/protected/config/main.php';
//开发模式下开启debug调试
// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each log message
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
//导入Yii的引导文件
require_once($yii);
//创建应用并初始化配置文件,运行应用
Yii::createWebApplication($config)->run();


那么createWebApplication方法主要是做写什么事情咧,我们去Yii的类里面看看

我们看到,Yii是调用了自身的另外一个静态方法createApplication,并且传递了配置文件参数$config

public static function createWebApplication($config=null)
{
return self::createApplication('CWebApplication',$config);
}


我们接着往下看,发现Yii在createApplication方法里面返回了一个
CWebApplication 类的实例化对象,并在构造函数时传递了配置文件参数

public static function createApplication($class,$config=null)
{
return new $class($config);
}


似乎想知道发生了什么,还得进入
CWebApplication的构造函数里面看看,那么我们去看看

public function __construct($config=null)
{
//将创建的webapp实例赋值给Yii的静态属性$app,在整个进程中可以使用Yii::app()来使用这个应用对象,这是一个单例模式
Yii::setApplication($this);
......
}


我们看到,在构造函数的第一步,调用了Yii的setApplication方法,并传递了实例化出来的CWebApplication对象,我们进入Yii的这个静态方法可以看到,Yii将创建出来的app对象赋值给了Yii的私有的静态属性$_app;

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


在Yii中我们又看到了这样的公共静态方法,在app()方法中,返回了它的私有静态属性$_app也就是CWebApplication对象

public static function app()
{
return self::$_app;
}


所以在接下来的页面的任何地方,我们都可以调用Yii::app()来访问CWebApplication对象,并且它是个单例对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  yii yii视频