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