为什么(false和false或true)返回true

时间:2014-07-17 07:14:00

标签: php operators operator-precedence

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。我没有合理的解释为什么会发生这种情况。

3 个答案:

答案 0 :(得分:8)

&&||优先于andor

您可以在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

我假设您只使用一个“类型”的逻辑运算符,请使用&&||andor。不要把它们结合起来。

答案 2 :(得分:0)

即使逻辑||or相同,但它们的优先级不是。

||的优先级高于OR,因此它们在您的2个语句中的解释方式不同。我想如果你添加一个括号,它会有相同的结果:

(false and (false || true));

OR

(false and (false or true));

更多here