代码之家  ›  专栏  ›  技术社区  ›  NikiC

PHP中的运算符优先级:三值异或赋值

  •  1
  • NikiC  · 技术社区  · 14 年前

    how to assign to multiple variables in a ternary operator

    true ? $w = 100 xor $r = 200 : $w = 300 xor $r = 400;
    var_dump($w); var_dump($r);
    

    (别费心了,这没用,这是理论上的。)

    现在,我希望PHP可以这样做,根据 operator precedence :

     true  ?   $w = 100  xor  $r = 200   :   $w = 300  xor  $r = 400  ;
    (true) ? ( $w = 100  xor  $r = 200 ) : ( $w = 300  xor  $r = 400 );
    (true) ? (($w = 100) xor ($r = 200)) : (($w = 300) xor ($r = 400));
    

    评估三元运算符的第一部分时,应输出:

    int 100
    int 200
    

    但是我得到了

    int 100
    int 400
    

    这对我来说很奇怪,因为它需要 三元算子的两部分 被执行。

    假设这是我思想上的错误。

    2 回复  |  直到 7 年前
        1
  •  4
  •   mvds    14 年前

    (true ? $w = 100 xor $r = 200 : $w = 300) xor $r = 400;
    
        2
  •  3
  •   Bill Karwin    14 年前

    我根本不会这样使用三元运算符。当需要整个表达式返回值时,请使用三元运算符,而不是作为逻辑代码构造的替代。

    例如:

    if (true) {
      $w = 100;
      $r = 200;
    } else {
      $w = 300;
      $r = 400;
    }
    
    var_dump($w); 
    var_dump($r);
    

    • 易于阅读,易于维护,易于调试。
    • 如果使用代码覆盖率工具运行测试,当所有代码都不在同一行时,可以更准确地查看正在测试的代码路径。

    使用三元运算符的优点: