【发布时间】:2012-01-25 19:18:58
【问题描述】:
为什么我收到此代码的解析错误:
$func = "do_{$something}" = $func();
?
应该是正确的,因为
$func = "do_{$something}";
$func = $func();
工作...
【问题讨论】:
为什么我收到此代码的解析错误:
$func = "do_{$something}" = $func();
?
应该是正确的,因为
$func = "do_{$something}";
$func = $func();
工作...
【问题讨论】:
以这段代码为例:
$a = $b = 3;
如果赋值可以从左边开始,这将被解析为:
$a = $b;
$b = 3;
这会给你一个未定义的变量错误。
相反,它被解析为:
$b = 3;
$a = $b;
【讨论】:
你正在尝试做的相当于以下内容:
"do_{$something}" = $func();
$func = "do_{$something}";
这显然有语法错误。您的第二个代码块读起来不太好,因为您正在用函数调用的结果覆盖函数名称变量。一种更简洁的方法是:
$result = call_user_func('do_' . $something);
【讨论】:
$func设置为do_{$something},然后执行名称为do_{$something}的函数,然后将$func设置为它的返回值。所以它做了一些非常愚蠢的事情,但它做了 something...
这是无效的,因为= 运算符是right-associative。这意味着最右边的=首先被执行,所以你的代码实际上是等价的:
"do_{$something}" = $func();
$func = "do_{$something}";
【讨论】: