以下代码:
$result = (false or true);
echo("With extra parentheses: ".($result?"true":"false"));
$result = false or true;
echo("<br />With no parentheses: ".($result?"true":"false"));
生成输出:
With extra parentheses: true
With no parentheses: false
我不明白为什么。不应该通过首先测试$result = false or true;
来评估false
,然后,因为它不是真的,继续评估true
?
我们非常感谢任何建议。
答案 0 :(得分:14)
or
运算符的优先级低于赋值运算符。在第二种情况下真正发生的是($result = false) or true
,因此or true
部分确实没有效果。
赋值运算符生成指定的值作为结果,在这种情况下为false
。将赋值运算符视为产生结果的普通二元运算符(如+
,<
和or
),唯一的区别是它有副作用。
如果您想避开括号,可以将or
换成||
,其优先级更高。
使用英文版逻辑运算符时要小心,因为它们的优先级不同。