为变量函数调用添加一个字符串

prepending a string for a variable function call

PHP 支持 variable functions。例如。如果 $str == 'testfunc';$str(); 调用 testfunc()。我想用它来测试一堆函数,比如 funcname()prefix_funcname()。我在想我可以做类似...

${$prefix . 'funcname'} 不起作用。这给出了这个错误:

Notice: Undefined variable: funcname

Fatal error: Function name must be a string

我尝试了其他几种变体,但都没有成功。我宁愿在一行中完成所有操作,而不是 $funcname = $prefix . $functname; $funcname();`.

有什么想法吗?

你已经用 PHP 5.6 标记了它,所以正确的答案是使用这两行(如果你真的觉得需要,你可以将它们放在同一行)或 call_user_func or call_user_func_array.

像许多其他询问如何解决语法限制以一次性完成事情的问题一样,Uniform Variable Syntax RFC 在 PHP 7 中修复了问题,您可以在其中使用:

($prefix . 'funcname')();

这个 RFC 被严重低估了。


事情是这样的,您可以实际执行您在早期版本中尝试执行的操作。

有点。

警告:这太恶心了。使用你自己的风险从其他程序员报复。

${${$prefix . 'funcname'} = $prefix . 'funcname'}();

这绝对是可怕的,但它适用于所有支持的 PHP 版本(可能更早,我没有费心去尝试。)

为了便于解释,我们假设 $prefix = "prefix_";

首先 ${$prefix . 'funcname'} 创建一个解析为 $prefix_funcname.

variable variable(不要使用这些)

所以

${$prefix . 'funcname'} = $prefix . 'funcname'

可以达到

$prefix_funcname = "prefix_funcname"

并且因为 the value of an assignment expression is the value assigned 最外层的 ${...} 获得了值 "prefix_funcname" 并再次为您提供了一个解析为 $prefix_funcname 的变量变量,我们已经给出了值 "prefix_funcname".

留给您对 prefix_funcname().

的可变函数调用

请不要这样做。