有没有办法通过变量调用函数?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