[PHP]可變函數名稱


會用到這玩意是因為要做一個比較靈活的Excel匯入功能,其中欄位變數、是否必填、欄位中文名稱(提示錯誤訊息用),都已經使用陣列及Foreach指定動態變數資料的處理,可滿足各個客戶不同的匯入欄位需求,但當時在撰寫程式時沒時間也沒那麼聰明的去想到如何處理匯入文字轉ID的部分。

於是和同事討論後發現可參照欄位變數的陣列命名方法,再寫一個陣列預存各欄位需要做代碼轉換的Function名稱,並在指定變數時順便去做代碼轉換。

查一查這個方法中文名稱叫做:可變函數名稱


可變函數名稱
一般函數名稱在定義函數時即決定好,但 PHP 提供一種技術,可以讓我們將函數的名稱存放在一個變數裡,當呼叫這個變數時,即等於呼叫變數值相對應的函數。這種可以利用變數指定不同函數名稱的技術即稱為可變函數名稱。
底下是一個簡單的可變函數應用範例:
function male() {
   ...
}
function female() {
   ...
}
if ($sex == "male")
   person$ = 'male';
else
   person$ = 'female';

$person(); 

這個蠻方便的,我自己寫的測試案例如下

function test(){
echo "123";
}
$aTest=array("test");
Foreach($aTest as $t){
$tt = $t;
$tt();
}

像這樣畫面上就會直接跑function test,畫面上會echo 123,可以達成這樣的效果,但假設陣列回傳的是陣列的時候,可能在指定變數時還要再做處理,總之在某些複合欄位(如郵遞區號+縣市+鄉鎮+路名)的時候可能在處理上還得花些心思,但大體而言這個方式可以處理單一欄位的ID轉換。

留言