2011-01-10 71 views
13

有没有办法通过变量调用函数?php - 动态调用函数

例如,我想调用函数Login()。我可以这样做:

$varFunction = "Login"; //to call the function 

我可以使用$ varFunction吗?

+1

是的,PHP支持这个。但我强烈建议不要使用它,除非你是受虐狂或计划一些破坏 – 2011-01-10 12:50:43

+2

嗨,其实原因是因为我想有相同的功能名称,但对于不同的模块。所以例如登录模块和Profile模块都有一个函数调用main() – nuttynibbles 2011-01-10 12:52:12

+0

Doh! **继承**它! – 2011-01-10 12:53:28

回答

23

是的,你可以:

$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()。

6

可以使用...

$varFunction = "Login"; 
$varFunction(); 

...和它不言而喻,以确保该变量是可信的。

2
<?php 
    $fxname = 'helloWorld'; 

    function helloWorld(){ 
    echo "What a beautiful world!"; 
    } 

    $fxname(); //echos What a beautiful world! 
?> 
0

你真的应该考虑对模块使用类,因为这样可以让你有一致的代码结构,并保持几个模块的方法名称相同。这也会让您灵活地继承或更改每个模块的代码。

关于除上述调用方法(即使用变量作为函数名称或函数族)的主题,从PHP 5.3开始,您可以使用动态匿名函数closures,它可以为您提供以另一种方式去做你想做的事。