有沒有辦法通過變量調用函數?php - 動態調用函數
例如,我想調用函數Login()。我可以這樣做:
$varFunction = "Login"; //to call the function
我可以使用$ varFunction嗎?
有沒有辦法通過變量調用函數?php - 動態調用函數
例如,我想調用函數Login()。我可以這樣做:
$varFunction = "Login"; //to call the function
我可以使用$ varFunction嗎?
是的,你可以:
$varFunction();
或者:
call_user_func($varFunction);
確保您驗證$ varFunction惡意輸入。
編輯:
你的模塊,可以考慮這樣的事情(根據您的實際需求):
abstract class ModuleBase {
public function main() {
echo 'main on base';
}
}
class ModuleA extends ModuleBase {
public function main() {
parent::main();
echo 'a';
}
}
class ModuleB extends ModuleBase {
public function main() {
parent::main();
echo 'b';
}
}
function runModuleMain(ModuleBase $module) {
$module->main();
}
然後用正確的模塊實例調用runModuleMain()。
可以使用...
$varFunction = "Login";
$varFunction();
...和它不言而喻,以確保該變量是可信的。
<?php
$fxname = 'helloWorld';
function helloWorld(){
echo "What a beautiful world!";
}
$fxname(); //echos What a beautiful world!
?>
你真的應該考慮對模塊使用類,因爲這樣可以讓你有一致的代碼結構,並保持幾個模塊的方法名稱相同。這也會讓您靈活地繼承或更改每個模塊的代碼。
關於除上述調用方法(即使用變量作爲函數名稱或函數族)的主題,從PHP 5.3開始,您可以使用動態匿名函數closures,它可以爲您提供以另一種方式去做你想做的事。
是的,PHP支持這個。但我強烈建議不要使用它,除非你是受虐狂或計劃一些破壞 – 2011-01-10 12:50:43
嗨,其實原因是因爲我想有相同的功能名稱,但對於不同的模塊。所以例如登錄模塊和Profile模塊都有一個函數調用main() – nuttynibbles 2011-01-10 12:52:12
Doh! **繼承**它! – 2011-01-10 12:53:28