如何让php函数作为字符串做实函数?

时间:2012-11-26 18:15:56

标签: php

假设我有一个名为printuser()

的函数

现在,如果我有像

这样的字符串
$myFunction = 'printuser()';

我如何将此字符串作为函数运行?所以它应该执行printuser()函数

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

  1. 使用eval
  2. 你几乎永远不应该这样做。几乎总是有更好,更安全,更安全的方式。

答案 2 :(得分:1)

如果您只想让$myFunction指定要运行的功能,您可以执行类似

的操作
$myFunction = 'printuser';
$myFunction();

这称为“variable function”,其危险性略低于eval。 (您可以调用任何现有函数,但不能运行任意代码。)

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

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

如果函数不存在,请将throw替换为您想要执行的操作。这只是一个例子。

答案 3 :(得分:0)

你可以尝试

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

要进行验证,您可以使用is_callable

is_callable($myFunction) and $myFunction();

Simple Demo

答案 4 :(得分:0)

有失败保障的建议:

$function = str_replace("()", "", $input);
if( function_exists($function))
{
  $function();
}
else
{
  // ignore or show an error
}