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
相關文章
- Yii2-application用法 (Yii::$app用法)APP
- Yii2 應用概述
- Yii2原始碼分析(一):入口原始碼
- Yii2 應用概覽
- Yii 技巧
- Yii 框架Model和ActiveRecord 的區別框架
- Yii2框架URL美化教程框架
- Yii 批次插入
- YII框架 外掛引入問題,手動引入 redis外掛, class "yii\redis\Cache".框架Redis
- YII2.0框架生成二維碼框架
- yii2 模型模型
- yii2-sessionSession
- yii2-CookieCookie
- Yii2 事件事件
- yii2 坑
- yii 佇列不行佇列
- Yii2設計模式——單例模式設計模式單例
- YII 的 with 與 joinwith 的區別和使用
- 基於Yii2的應用開發引擎RageFrame
- yii2-websocket | 基於 yii2 實現的 WebSocket 擴充套件Web套件
- 將 goaop 整合到 Yii,在 Yii 中優雅的面向切面程式設計Go程式設計
- yii-pay - 適配於 Yii 的 alipay 和 wechat 的支付擴充套件包套件
- Yii1.1.4釋出,高效能的PHP框架PHP框架
- Yii2 where使用
- yii2檢視
- yii2-分頁
- Yii2 Action用法
- yii2 總結
- Yii2使用Composer
- yii 安裝及配置
- YII安裝踩坑
- yii2-wx / 在yii2-wx中如何正確的使用try….catch….
- Yii2.0 RESTful風格的Controller與ActiveControllerRESTController
- Yii2多模型與事務的用法模型
- [Yii2] yii2-queue 基於redis 佇列測試學習Redis佇列
- 優秀PHP優秀框架Laravel和Yii的詳解PHP框架Laravel
- Yii2事件示例解析事件
- yii2 config_02
- Yii2-助手類(StringHelper)