項目越做越大,代碼越來越亂,維護困難。原因很多吧。起初為了實現(xiàn)功能,并沒有注重代碼的結(jié)構(gòu),外包公司嘛。雖然公司的項目負責人一直考慮復用、封裝,但是我覺得基本上沒有達到想要的效果。因為整個代碼中沒有沒有用到設(shè)計模式,這樣結(jié)構(gòu)肯定好不到哪去。雖然很多功能都封裝了,但是分層特別的亂,有種為了封裝而封裝的感覺。其實,很多東西我也不懂,但是寫完代碼之后,偶爾還是會去把代碼的結(jié)構(gòu)稍微的修改修改,盡量的少給自己挖坑吧。
代碼結(jié)構(gòu)的問題
接口有大量的方法,調(diào)用接口時需要使用 switch 進行判斷,大致結(jié)構(gòu)如下:
private function makeXML($xmlName, $xmlNameParam) $requestData = null; switch ($xmlName) { // ... case sendOrder : $requestData = $this- sendOrder($xmlNameParam); break; case ecfareQuery : $requestData = $this- ecfareQuery($xmlNameParam); break; case getInterAV : $requestData = $this- getInterAV($xmlNameParam); break; // ... return $requestData;}
以上 case 中都是調(diào)用對應(yīng)的方法來拼接接口所需的 XML 信息的。
方法的參數(shù)分別傳遞了拼接接口方法的名稱和參數(shù)。
這樣的判斷結(jié)構(gòu)代碼感覺不好管理,增加一個方法方法,就需要增加一個 case 調(diào)用,而且看的時候也比較亂。
代碼結(jié)構(gòu)的改進
因此進行了相關(guān)的改進,改進方式如下:
1、先定義一個方法數(shù)組,用于保存方法名,定義如下
protected $arr = [];html' target='_blank'>public function __construct() // 初始化接口方法 $this- arr = [ getAV = getAV , sendOrder = sendOrder , ecfareQuery = ecfareQuery , getInterAV = getInterAV , // ...}
將來該接口下有了新的方法,直接添加到數(shù)組里就可以了。這樣可以省去大量的 switch case 的判斷。
2、修改 switch 的結(jié)構(gòu),代碼如下:
private function makeXML($xmlName, $xmlNameParam) $requestData = null; $fun = $this- arr[$xmlName]; $requestData = $this- $fun($xmlNameParam); return $requestData;}
將 switch case 的結(jié)構(gòu)改成了以數(shù)組下標的方式進行調(diào)用的方式。這樣就把所有的方法統(tǒng)一管理了起來。
以上思路來自于 MFC 框架對 Windows 消息的處理。
相當于 C 語言中的函數(shù)指針數(shù)組,或 C# 里的委托。
知識補充:
面向過程的函數(shù)變量(往上找的)
function come() { //定義com函數(shù) echo 來了 p function go($name = jack ) { //定義go函數(shù) echo $name. 走了 p function back($string) //定義back函數(shù) echo 又回來了,$string p $func = come //聲明一個變量,將變量賦值為“come”$func(); //使用變量函數(shù)來調(diào)用函數(shù)come()$func = go //重新給變量賦值$func( Tom //使用變量函數(shù)來調(diào)用函數(shù)go()$func = back //重新給變量賦值$func( Lily //使用變量函數(shù)來調(diào)用函數(shù)back();
對于PHP中面向?qū)ο?/u>的方式如下(自己實現(xiàn)的):
?phpclass test public $arr = []; public function __construct() $this- arr = array( func1 = func1 , func2 = func2 , func3 = func3 , func4 = func4 , func5 = func5 , public function submit($func, $str) $f = $this- arr[$func]; $this- $f($str); static public function func1($str) print func1 . . $str . /n static public function func2($str) print func2 . . $str . /n public function func3($str) print func3 . . $str . /n private function func4($str) print func4 . . $str . /n private function func5($str) print func5 . . $str . /n $t = new test(); // 實例化類$f = $t- arr[ func1 test::$f( abc // func1 func2 是靜態(tài)方法$f = $t- arr[ func2 test::$f( abc $f = $t- arr[ func3 // func3 的調(diào)用$t- $f( abc // func4 func5 的調(diào)用需要使用 submit 方法進行分發(fā)$t- submit( func4 , abc $t- submit( func5 , bcd
以上代碼的輸出結(jié)果如下:
func1 abcfunc2 abcfunc3 abcfunc4 abcfunc5 bcd
以上就是如何使用php的函數(shù)變量數(shù)組實現(xiàn)代碼結(jié)構(gòu)的改變(附示例)的詳細內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。
新聞熱點
疑難解答
圖片精選