【问题标题】:Why (false and false or true) returns true为什么(假和假或真)返回真
【发布时间】:2014-09-07 22:39:32
【问题描述】:
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) 返回真。我没有合乎逻辑的解释为什么会发生这种情况。

【问题讨论】:

标签: php operators operator-precedence


【解决方案1】:

&&|| 的优先级高于 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

【讨论】:

    【解决方案2】:

    http://php.net/manual/en/language.operators.precedence.php

    当我们按优先级对运算符进行排序时,它是:

    && > || > AND > OR
    

    它回答了你的问题。 || 的优先级高于 AND

    我假设您只使用一种“类型”的逻辑运算符,使用&amp;&amp;||andor。不要合并它们。

    【讨论】:

      【解决方案3】:

      虽然||or 在逻辑上相同,但它们的优先级不同。

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

      (false and (false || true));
      

      (false and (false or true));
      

      更多here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-05
        • 1970-01-01
        • 2015-10-05
        • 2019-01-30
        • 2018-07-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-09
        相关资源
        最近更新 更多