【问题标题】:What is the difference between the OR and || operator in PHP? [duplicate]OR 和 || 有什么区别? PHP中的运算符? [复制]
【发布时间】:2012-09-09 11:01:48
【问题描述】:

可能重复:
Logical Operators, || or OR?

我一直认为 OR 是 || 的另一种写法PHP 中的运算符。我更喜欢使用 OR 而不是 || 的唯一方法是它使代码更容易阅读,因为 ||可能与 II 或 11 或其他混淆...

有一天我偶然发现了这个东西:

<?php 
      $a = 'string_b';
      $active = ($a == 'string_a') OR
                ($a == 'string_b') OR
                ($a == 'string_c');  
   var_dump($active); // Prints FALSE;
?>

为什么会这样?

【问题讨论】:

    标签: php operators


    【解决方案1】:

    唯一的区别是操作员优先级,请参阅Operator precedence|| 的优先级高于 OR

    顺便说一句,var_dump($a) 返回 null打印正确的东西,string_b。 但是,var_dump($active) 确实会产生意想不到的结果,false。 其实=的优先级高于or,所以你的代码相当于:

    ($active = ($a == 'string_a')) OR ($a == 'string_b') OR ($a == 'string_c');
    

    它首先将false 分配给活动,然后执行第一个OR 的右侧部分。

    【讨论】:

    • 上面搞错了……更正了
    • @Loupax:当然,编辑了我的答案:)
    【解决方案2】:

    都是一样的。但是|| 的优先级高于OR http://php.net/manual/en/language.operators.precedence.php

    【讨论】:

      【解决方案3】:

      = 的优先级高于 OR。因此,首先评估 $active = ($a == 'string_a') ,这是错误的。将整个右侧括在它自己的一组括号中,您将得到您期望的结果。

      <?php 
            $a = 'string_b';
            $active = (
                       ($a == 'string_a') OR
                       ($a == 'string_b') OR
                       ($a == 'string_c')
                      );
         var_dump($active); // Prints TRUE;
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-22
        • 2021-04-19
        • 2021-11-08
        • 2021-12-23
        • 2011-06-12
        • 2016-04-28
        • 2011-01-02
        • 2021-11-08
        相关资源
        最近更新 更多