为变量函数调用添加一个字符串
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()
.
的可变函数调用
请不要这样做。
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
.
所以
${$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()
.
请不要这样做。