var_dump(false and false || true);
// result: bool(false)
(false and false || true)
按预期返回false。
var_dump(false and false or true);
// result: bool(true)
但(false and false or true)
返回true。我没有合理的解释为什么会发生这种情况。
答案 0 :(得分:8)
&&
和||
优先于and
和or
您可以在PHP文档中看到Operator precedence
所以
<?php
var_dump(false and false || true);
// eq: false and (true or false) => false
var_dump(false and false or true);
// eq: (false and false) or true => true
答案 1 :(得分:1)
查看http://php.net/manual/en/language.operators.precedence.php
当我们按优先级对运算符进行排序时,它是:
&& > || > AND > OR
这是你问题的答案。 ||
的优先级高于AND
。
我假设您只使用一个“类型”的逻辑运算符,请使用&&
和||
或and
和or
。不要把它们结合起来。
答案 2 :(得分:0)
即使逻辑||
和or
相同,但它们的优先级不是。
||
的优先级高于OR
,因此它们在您的2个语句中的解释方式不同。我想如果你添加一个括号,它会有相同的结果:
(false and (false || true));
OR
(false and (false or true));
更多here