【问题标题】:Multiple assignments to the same variable对同一个变量的多次赋值
【发布时间】:2012-01-25 19:18:58
【问题描述】:

为什么我收到此代码的解析错误:

$func = "do_{$something}" = $func();

?

应该是正确的,因为

$func = "do_{$something}";
$func = $func();

工作...

【问题讨论】:

    标签: php function variables


    【解决方案1】:

    因为作业有效from right to left

    以这段代码为例:

    $a = $b = 3;
    

    如果赋值可以从左边开始,这将被解析为:

    $a = $b;
    $b = 3;
    

    这会给你一个未定义的变量错误。

    相反,它被解析为:

    $b = 3;
    $a = $b;
    

    【讨论】:

      【解决方案2】:

      你正在尝试做的相当于以下内容:

      "do_{$something}" = $func();
      $func = "do_{$something}";
      

      这显然有语法错误。您的第二个代码块读起来不太好,因为您正在用函数调用的结果覆盖函数名称变量。一种更简洁的方法是:

      $result = call_user_func('do_' . $something);
      

      【讨论】:

      • 它做了一些事情——它将$func设置为do_{$something},然后执行名称为do_{$something}的函数,然后将$func设置为它的返回值。所以它做了一些非常愚蠢的事情,但它做了 something...
      • @lonesomeday:我想这很令人困惑。为了清楚起见,我更新了我的答案。
      【解决方案3】:

      这是无效的,因为= 运算符是right-associative。这意味着最右边的=首先被执行,所以你的代码实际上是等价的:

      "do_{$something}" = $func();
      $func = "do_{$something}";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-27
        • 1970-01-01
        • 1970-01-01
        • 2012-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多