|
導讀網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立... 網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立在超文本基礎之上的。超級文本標記語言之所以稱為超文本標記語言,是因為文本中包含了所謂“超級鏈接”點。 本篇文章給大家帶來的內容是關于如何使用php的函數變量數組實現代碼結構的改變(附示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。項目越做越大,代碼越來越亂,維護困難。原因很多吧。起初為了實現功能,并沒有注重代碼的結構,外包公司嘛。雖然公司的項目負責人一直考慮復用、封裝,但是我覺得基本上沒有達到想要的效果。因為整個代碼中沒有沒有用到設計模式,這樣結構肯定好不到哪去。雖然很多功能都封裝了,但是分層特別的亂,有種為了封裝而封裝的感覺。其實,很多東西我也不懂,但是寫完代碼之后,偶爾還是會去把代碼的結構稍微的修改修改,盡量的少給自己挖坑吧。 代碼結構的問題 接口有大量的方法,調用接口時需要使用 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 = [];
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中面向對象的方式如下(自己實現的): <?php
class 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 abc func2 abc func3 abc func4 abc func5 bcd 以上就是如何使用php的函數變量數組實現代碼結構的改變(附示例)的詳細內容,更多請關注php中文網其它相關文章! 網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。 |
溫馨提示:喜歡本站的話,請收藏一下本站!