国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

如何使用php的函數(shù)變量數(shù)組實現(xiàn)代碼結(jié)構(gòu)的改變

2020-03-22 20:19:37
字體:
供稿:網(wǎng)友
本篇文章給大家?guī)淼膬?nèi)容是關(guān)于如何使用php的函數(shù)變量數(shù)組實現(xiàn)代碼結(jié)構(gòu)的改變(附示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

項目越做越大,代碼越來越亂,維護(hù)困難。原因很多吧。起初為了實現(xiàn)功能,并沒有注重代碼的結(jié)構(gòu),外包公司嘛。雖然公司的項目負(fù)責(zé)人一直考慮復(fù)用、封裝,但是我覺得基本上沒有達(dá)到想要的效果。因為整個代碼中沒有沒有用到設(shè)計模式,這樣結(jié)構(gòu)肯定好不到哪去。雖然很多功能都封裝了,但是分層特別的亂,有種為了封裝而封裝的感覺。其實,很多東西我也不懂,但是寫完代碼之后,偶爾還是會去把代碼的結(jié)構(gòu)稍微的修改修改,盡量的少給自己挖坑吧。

代碼結(jié)構(gòu)的問題

接口有大量的方法,調(diào)用接口時需要使用 switch 進(jìn)行判斷,大致結(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)的改進(jìn)

因此進(jìn)行了相關(guān)的改進(jìn),改進(jì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ù)組下標(biāo)的方式進(jìn)行調(diào)用的方式。這樣就把所有的方法統(tǒng)一管理了起來。

以上思路來自于 MFC 框架對 Windows 消息的處理。

相當(dāng)于 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 方法進(jìn)行分發(fā)$t- submit( func4 , abc $t- submit( func5 , bcd 

以上代碼的輸出結(jié)果如下:

func1 abcfunc2 abcfunc3 abcfunc4 abcfunc5 bcd

以上就是如何使用php的函數(shù)變量數(shù)組實現(xiàn)代碼結(jié)構(gòu)的改變(附示例)的詳細(xì)內(nèi)容,PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 淮阳县| 隆子县| 昌黎县| 渝北区| 星子县| 嵊州市| 临夏市| 黄冈市| 镇坪县| 湖州市| 甘孜县| 兴隆县| 普兰店市| 余干县| 潜江市| 嘉黎县| 太康县| 辽源市| 乌审旗| 汉中市| 梓潼县| 剑河县| 谷城县| 卢氏县| 石门县| 唐河县| 珲春市| 淄博市| 铅山县| 花莲市| 手机| 柳州市| 从化市| 永吉县| 丹巴县| 青河县| 桓仁| 南投县| 太保市| 岑溪市| 鹤岗市|