我需要能够调用一个函数,但函数名存储在一个变量,这是可能的吗?例句:

function foo ()
{
    //code here
}

function bar ()
{
    //code here
}

$functionName = "foo";
// I need to call the function based on what is $functionName

当前回答

为了完整起见,你也可以使用eval():

$functionName = "foo()";
eval($functionName);

然而,call_user_func()是正确的方法。

其他回答

$functionName()或call_user_func($functionName)

为了完整起见,你也可以使用eval():

$functionName = "foo()";
eval($functionName);

然而,call_user_func()是正确的方法。

动态函数名和命名空间

只是在使用名称空间时补充一点关于动态函数名的内容。

如果你正在使用命名空间,下面的代码将不起作用,除非你的函数在全局命名空间中:

namespace greetings;

function hello()
{
    // do something
}

$myvar = "hello";
$myvar(); // interpreted as "\hello();"

怎么办呢?

你必须使用call_user_func()来代替:

// if hello() is in the current namespace
call_user_func(__NAMESPACE__.'\\'.$myvar);

// if hello() is in another namespace
call_user_func('mynamespace\\'.$myvar);

使用存储在变量中的名称安全地调用函数的最简单方法是,

//I want to call method deploy that is stored in functionname 
$functionname = 'deploy';

$retVal = {$functionname}('parameters');

我使用如下方法在Laravel中动态创建迁移表,

foreach(App\Test::$columns as $name => $column){
        $table->{$column[0]}($name);
}

下面的代码有助于用PHP编写动态函数。 现在函数名可以通过变量'$current_page'动态更改。

$current_page = 'home_page';
$function = @${$current_page . '_page_versions'};
$function = function() {
    echo 'current page';
};
$function();