【问题标题】:Precedence of AND and OR into an IF statementAND 和 OR 在 IF 语句中的优先级
【发布时间】:2012-09-06 18:37:47
【问题描述】:

这些语句是等价的吗?

if ($a || $b && $c)
{
    // ...
}

if (($a || $b) && $c)
{
    // ...
}

编辑

真是太棒了!但值得...谢谢大家!

【问题讨论】:

  • 请在您的本地主机中测试这个
  • 其实你应该避免像第一行那样写,因为它是模棱两可的
  • 我可以阅读手册,但逻辑不是那么容易理解。这就是为什么要问,肯定有人可以给出一些简短而有用的答案。
  • @yes123 这就是这里的想法,使用优先级而不是括号。

标签: php if-statement logic conditional-statements


【解决方案1】:

答案:。它们不相等。

查看the PHP Operator Precedence table。它清楚地在|| 之前列出了&&

在此处查看实际操作:http://viper-7.com/cPycas


如果你想使用优先级而不是括号,你可以使用更详细的AND

if ($a || $b AND $c)
{
    // ...
}

Here's the demo,但我建议你不要这样做,因为它不像括号那么清楚。

【讨论】:

  • 停止吧聪明的家伙。手册没有说如何理解逻辑。我不是一个总是要整理的简单问题,当然不仅对我..
  • @NomikOS - 对不起,如果我对你有点苛刻,但表格很容易阅读(一旦你掌握了它)。任何出现在表格上方的运算符都优先于其下方的任何运算符。
【解决方案2】:

&& 的优先级高于 ||,所以不,它们不相等。

【讨论】:

    【解决方案3】:

    没有。在 PHP 中,($a || $b && $c) 被评估为:($a || ($b && $c))

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

    【讨论】:

      【解决方案4】:

      AND 视为乘法,将 OR 视为加法,您将获得真实性和优先级。

      $a = 1; 
      $b = 0;
      $c = 0;
      
      if ($a + $b * $c)
      {
          // ...
      }
      
      if (($a +  $b) * $c)
      {
          // ...
      }
      

      【讨论】:

        【解决方案5】:

        && 优先于 ||。 Operator precedence

        【讨论】:

        • @downvoter 可能会检查我上面的(未经编辑的)评论的时间戳。我很难与标签上的引用竞争。
        猜你喜欢
        • 2013-03-30
        • 2013-05-16
        • 2014-05-04
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 2017-08-03
        • 2018-06-13
        • 1970-01-01
        相关资源
        最近更新 更多