摘要:應(yīng)用PHP作為Web項目開發(fā)語言,類文件之間的相互引用常見又頻繁,但在MVC開發(fā)模式之下,由于類文件位置的分散,而使得類間引用關(guān)系條理不清。為優(yōu)化代碼編寫效率與執(zhí)行效率,運用當(dāng)前控制器、行為方法路由地址動態(tài)裝載和改寫自動加載類的方法,實現(xiàn)隨請求的改變動態(tài)加載類文件。
關(guān)鍵詞:MVC
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)34-0060-02
軟件項目開發(fā)中,為提高效率,提高程序員的代碼產(chǎn)量,框架的應(yīng)用尤其廣泛。PHP因其上手快,業(yè)務(wù)框架多等特點成為現(xiàn)今B/S模式開發(fā)下熱門語言,程序設(shè)計人員可以根據(jù)業(yè)務(wù)需求靈活選用不同的框架進行快速代碼部署[1]。然而,無論哪種框架模式,都需要程序人員對原生代碼的熟知與靈活運用,就PHP開發(fā)環(huán)境下MVC模式的代碼設(shè)計來說,分離的組織代碼路徑的獲取是令人頭疼,也是最容易代碼運行中產(chǎn)生錯誤的地方。為此,創(chuàng)建一個動態(tài)路徑的加載應(yīng)用會極大方便編碼,解脫程序員在不同路徑的煩瑣搜尋。
1 問題環(huán)境的描述
1.1 MVC模式
MVC(ModeIViewController)即模型一視圖一控制器的縮寫,是流行至今的一個軟件設(shè)計典范,多種開發(fā)語言中均有運用[2]。它是一種運用業(yè)務(wù)邏輯、數(shù)據(jù)以及應(yīng)用交互界面分離的方法來組織代碼,將眾多的業(yè)務(wù)邏輯匯集到一個部件中,在需要改進與個性化定制界面及用戶交互的時,無須重新編寫業(yè)務(wù)邏輯,從而提高編碼效率。
1.2文件手動加載
PHP項目開發(fā)中,模型、視圖與控制器為保證相互獨立,編碼文件所在目錄分散,造成文件調(diào)用過程中文件包含關(guān)系錯綜復(fù)雜,程序員需耗費相當(dāng)精力實現(xiàn)被包含文件的加載,且包含條理混亂,錯誤頻發(fā)。對項目的后期維護與迭代都會產(chǎn)生相當(dāng)?shù)挠绊憽?/p>
為此,項目設(shè)計起始就應(yīng)解決模塊間的加載困擾,應(yīng)用某策略,使得在文件調(diào)用中無須關(guān)顧太多路徑問題。
2 自動加載實現(xiàn)
MVC模式下,模型、視圖與控制器分屬不同目錄文件位置(如圖2),用戶首先訪問人口頁面視圖,視圖請求控制器,控制器響應(yīng)特定行為,獲取相應(yīng)模型數(shù)據(jù),而后將處理結(jié)果反饋到視圖中呈現(xiàn)給用戶。因而,在訪問請求中需明確控制器和控制器執(zhí)行的行為名稱。在用戶的首次訪問時,因請求地址可能只包含域名而未給定控制器與行為名,故而使用默認(rèn)初始化的CONTROLLER_NAME和ACTION_NAME,當(dāng)用戶請求非首頁頁面時,由于鏈接地址中明確給出了控制器和行為名稱,在經(jīng)過路由裝載后,生成當(dāng)前控制器和視圖的路徑并存放與“URL”和“VIEW_”中,當(dāng)實例化類對象時,自動調(diào)用經(jīng)重寫和注冊的自動加載類方法,實現(xiàn)包含文件后臺加載。
2.1 常量的定義
在實際項目中,站點代碼會因環(huán)境不同部署在不同存儲位置,故而應(yīng)首先獲取存儲目錄(ROOT_PATH),再依據(jù)站點的目錄結(jié)構(gòu)進行設(shè)定。具體描述見表1。
2.2 路由裝載
MVC模式頁面的訪問,一般域名地址相同,不同頁面區(qū)別只在于地址信息中控制器、行為方法和應(yīng)用平臺等信息的不同。當(dāng)控制器、行為方法或應(yīng)用平臺參數(shù)值發(fā)生改變時,執(zhí)行路由解析會針對不同URL,獲取不同的控制器和行為方法名,調(diào)用不同的模型應(yīng)用。代碼如下:
private static function initRoutes0{
$c=isset($_REQUEST["c"])? $_REQUEST["c"]: $GLOBALS[”config"][¨app¨][default_controller'];//接收控制器名
$a=isset($_REQUEST["a”])?
$_REQUEST["a"]:
$GLOBALS["config"]["app"][ 'default_action];//接收行為方法名
$p=isset($_REQUEST["p"D? $_REQUEST["p"): $GLOBALS[”config"][¨app¨Ⅱ7 default_platform 7];//接收平臺名
define(”CONTROLLER_NAME”,$c)//定義常量控制器名
define(”ACTION_NAME”,$a);//定義常量行為方法名
define(”PLATFORM—NAME”,$p);//定義常量平臺名
define(”一URL_”,
CONTROLLER_PATH.
PLAT-FORM_NAME.DS);//當(dāng)前的控制器目錄
define(“_VIEW一”,VIEW_PATH. PLATFORM_NAME. DS);//當(dāng)前視圖目錄:”
)
2.3 類的自動加載
為實現(xiàn)控制器類中方法能調(diào)用不同視圖和模型,需要在實例化類對象之前,加載類的定義,即要完成對不同存儲位置下類的引用。為優(yōu)化代碼的性能,節(jié)省無謂的精力消耗,應(yīng)用類自動加載方案。將自動加載類_autoLoad0方法運用pl_auto-load_register0重新注冊改寫,當(dāng)代碼解析為新引用類時,自動調(diào)用改寫方法,計算路由路徑地址予以實例化加載,以實現(xiàn)不同文件目錄下的類的自動加載。改寫代碼如下:
private static function autoLoad($class_name){
$class_map=array(' MySqIDB =>CORE_PATH.”MySqIDB.class.php”,
'Base' => CORE_PATH.”Base.class.php”);
if(isset($class_map[$class_name])
require
$class_map[$class_namel;
elseif(substr($class_name,一5)==”Model”)
require MOD-EL_PATH.$class_name.“.class.php”;
elseif(substr($class_name, 一10) == ”Controller”) require_URL—.$class_name.”.class.php”;)
3 結(jié)束語
本文主要闡述了在PHP語言環(huán)境下,應(yīng)用MVC的框架模式開發(fā)Web應(yīng)用系統(tǒng)中實現(xiàn)類的自動加載,將煩瑣的路徑加載問題運用依托于地址傳值與改寫類的自動加載方法得以解決。
參考文獻(xiàn):
[1]閆曉亮,焦素云.MVC模式PHP開發(fā)框架[J].長春工業(yè)大學(xué)學(xué)報,2016,37(6):592-596.
[2]趙紅霞,王建.基于MVC框架的在線教學(xué)管理系統(tǒng)設(shè)計與實現(xiàn)[J].信息記錄材料,2018,19(9):175-176.
【通聯(lián)編輯:朱寶貴】
收稿日期:2019 -10 -15
作者信息:張偉偉(1980-),男,安徽六安人,副教授,碩士,主要研究方向為計算機網(wǎng)絡(luò)與軟件開發(fā)。