1

让我们假设我有名为的函数printuser()

现在如果我有类似的字符串

$myFunction = 'printuser()';

我如何将此字符串作为函数运行?所以它应该做这个printuser()功能

4

5 回答 5

3

看看call_user_func。你需要稍微改变你的字符串(没有括号)。

于 2012-11-26T18:18:12.663 回答
1
  1. 使用eval
  2. 你几乎从不应该这样做。几乎总是有更好、更安全、更安全的方法。
于 2012-11-26T18:17:02.497 回答
1

如果您只想$myFunction指定要运行的函数,您可以执行类似的操作

$myFunction = 'printuser';
$myFunction();

这称为“变量函数”,比eval. (您可以调用任何现有函数,但不能运行任意代码。)

但是请注意:如果printuser不存在,脚本将会死掉。您可以考虑在调用它之前检查该函数的存在。

$myFunction = 'printuser';
if (function_exists($myFunction))
    $myFunction();
else
    throw new BadFunctionCallException("Function '$myFunction' doesn't exist");

如果该功能不存在,请将其替换为throw您想要执行的任何操作。这只是一个例子。

于 2012-11-26T18:19:49.827 回答
0

你可以试试

$myFunction = 'printuser()';
# Remove brakets
$myFunction = rtrim($myFunction, "()");
# Call Function Directly
$myFunction();

对于验证,您可以使用is_callable

is_callable($myFunction) and $myFunction();

简单演示

于 2012-11-26T18:19:14.423 回答
0

带有故障保险的建议:

$function = str_replace("()", "", $input);
if( function_exists($function))
{
  $function();
}
else
{
  // ignore or show an error
}
于 2012-11-26T18:29:09.017 回答