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();`。
有什么想法吗?
答案 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"
。
请不要这样做。