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

时间:2010-07-15 22:19:19

标签: php operator-precedence

在问题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);

(不要打扰它没用,这是理论上的。)

现在,根据operator precedence

,我希望PHP能够这样做
 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 个答案:

答案 0 :(得分:4)

你不是在做什么

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

答案 1 :(得分:3)

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

例如:

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

var_dump($w); 
var_dump($r);

使用if / else构造的优点:

  • 易于阅读,易于维护,更易于调试。
  • 如果需要,可以更轻松地在每个条件块中添加更多步骤。
  • 如果使用代码覆盖率工具运行测试,则可以更准确地查看当所有代码不在一行上时正在测试的代码路径。
  • 您无需向Stack Overflow发布问题即可使其正常运行!

使用三元运算符的优点:

  • 使用较少的花括号和分号,以防您用完它们或在键盘上找不到它们。