首頁 > php教程 > PHP开发 > 主體

Yii框架分析(六)-Yii的別名管理與物件創建管理

黄舟
發布: 2016-12-27 11:21:21
原創
1103 人瀏覽過

YiiBase類別為YII框架的運作提供了公共的基礎功能:別名管理與物件建立管理。

在創建一個php的物件時,需要先include這個類別的定義文件,然後再new這個物件。在不同環境下(開發環境/測試環境/線上環境),apache的webroot路徑的配置可能不一樣,所以這個類別的定義檔的全路徑就會不同,Yii框架透過YiiBase的別名管理來解決了這個問題。

在建立物件時,需要匯入對應類別的定義,常常需要使用這5個函數:include()、include_once()、require()、require_once()、set_include_path()。 Yii透過使用YiiBase::import()來統一解決這個問題。下圖描述了YiiBase提供「別名管理與物件建立管理」的工作原理:

Yii框架分析(六)-Yii的別名管理與物件創建管理

首先看別名管理,它是透過為某個資料夾(一個資料夾往往對應一個模組)起一個別名,在Yii框架中可以使用這個別名來取代這個資料夾的全路徑,例如:system別名代表的是框架/home/work/yii/framework的路徑,所以可以使用system.base.CApplication代表/home/work/yii /framework/base/CApplication.php檔案的路徑。當然在應用程式層的程式碼中也可以透​​過Yii::setPathOfAlias來註冊別名。

一般情況下我們使用絕對路徑或相對路徑來進行文件引用,當然這兩種情況都有弊端。絕對路徑:當我們的程式碼部署到測試環境或線上環境的時候需要大量修改被include檔案的路徑;相對路徑:當某些模組的資料夾的位置發生調整(改名)的時候,所有的相對路徑都需要修改。而使用別名的方式只需要改一處:註冊別名的時候,即Yii::setPathOfAlias()。從而將資料夾的變動而導致的程式碼改動集中到一處完成。

再看import功能:a、導入一個類別的定義,從而可以創建該類別的物件;b、將某個資料夾加入到include_path,從而可以直接include這個檔案下的所有檔案。 Yii::import相當於以下5個函數的統一:include()、include_once()、require()、require_once()、set_include_path()。而且一般情況下速度會比這些函數更快。當然Yii::import支援別名的功能,從而可以解決路徑變動帶來的麻煩。

最後看一下物件的創建,在YII框架中有2中方法創建物件:1、使用new關鍵字;2、使用Yii::createComponent方法。

當使用new關鍵字建立物件時,autoload會分3步驟來尋找對應類別的定義:a、判斷是否為framework中的類別(framework的所有類別和這個類別的全路徑都保存在YiiBase的一個成員變數中);2、判斷是否使用Yii::import導入了這個類,對於非框架的類,我們在創建這個類的對象時需要先import這個類的定義;3、從include_path目錄下查找以這個類名字命名的php腳本,所以在開發的時候類名盡量與文件名保存一致,這樣我們導入包含這個文件的資料夾就行了,從而無需把這個資料夾中的每個文件都導入一次。

當使用Yii::createComponent方法建立物件時,它提供了比new關鍵字更多的功能:a、透過這個類別的全路徑別名來指定類別的位置和類別名稱(類別名稱必須與檔案名稱一致),當這個類別還沒有導入的時候,會根據全路徑來自動導入這個類別的定義;2、對創建出來的物件的成員變數進行賦值。即如下圖描述,原來要寫3行以上的程式碼,現在一行程式碼就可以搞定(write less, do more)。

Yii框架分析(六)-Yii的別名管理與物件創建管理

 以上就是Yii框架分析(六)-Yii的別名管理與物件創建管理的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!