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

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

2014-07-08 21:11 330 查看
那么在浏览器中输入 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: