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

时间:2016-05-02 16:53:55

标签: php php-5.6

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();`。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您已使用PHP 5.6对此进行了标记,因此正确的答案是使用两行(如果您真的觉得有必要,可以将它们放在同一行)或call_user_func或{{3} }。

像许多其他问题一样,询问如何解决语法限制以便一次性完成任务,call_user_func_array在PHP 7中修复了一些问题,您可以使用:

($prefix . 'funcname')();

此RFC非常不受欢迎。

就是这样,你可以实际做你在早期版本中尝试做的事情。

有点儿。

警告:这很恶心。使用自己承担其他程序员报复的风险。

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

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

为了解释这一切,让我们说$prefix = "prefix_";

首先${$prefix . 'funcname'}创建Uniform Variable Syntax RFC(不要使用这些),解析为$prefix_funcname

所以

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

致力于

$prefix_funcname = "prefix_funcname"

因为variable variable最外面的${...}得到了值"prefix_funcname"并再次给你一个解析为$prefix_funcname的变量变量,我们已经给出了值{{1} }}

让您通过变量函数调用"prefix_funcname"

请不要这样做。