我爲我們公司建立了一個CMS,它具有大量的功能,其中許多功能與我們使用CMS所用的大多數網站都沒有使用的特定功能相關。那麼我的目標就是隻在需要時才包含函數的腳本(當函數被調用時)。定義PHP函數的名字時可以使用變量嗎?
現在,我只是簡單地調用每個函數,要求函數的實際腳本所在的文件,然後調用第二個函數(與函數名稱相同,但帶有下劃線前綴)其中包含該函數的實際腳本。例如:
function foo($a,$b) {
require_once "funtions-foo.php";
return _foo($a,$b);
}
然而,這似乎有點重複我。我在尋找的是一種'捕捉'函數調用的方法,如果它的名字在'包含'函數的數組中,我將包含正確的文件並調用函數。例如:
catch_function_call($function,$arg1,$arg2) {
$array = array(
'foo' => 'functions-foo.php',
'bar' => 'functions-bar.php'
);
if($array[$function]) {
require_once $array[$function];
return $function($arg1,$arg2);
}
}
有我假設「catch_function_call」功能,當一個函數被調用能以某種方式趕上。因爲我知道沒有這樣的功能,但是,我的第二個想法是簡單地使用變量來定義每個「包含」功能。例如:
$array = array(
'foo' => 'functions-foo.php',
'bar' => 'functions-bar.php'
);
foreach($array as $function => $file) {
function $function($arg1,$arg2) {
$_function = "_".$function;
require_once $file;
return $_function($arg1,$arg2);
}
}
當然,這給了我,因爲我顯然不能在函數的名稱定義它,當使用一個變量的錯誤。有關如何繞過此解決方案或其他解決方案的任何想法,以便在需要時僅包含一個函數?
這可能聽起來像是最好的解決方案,但它似乎需要重寫所有函數調用,這可能比它的價值更多的工作。儘管如此,對於未來發展還是很瞭解的。 – Charlie 2010-11-09 20:20:05