【问题标题】:&& and 'and' are the same in php? [duplicate]&& 和 'and' 在 php 中是一样的吗? [复制]
【发布时间】:2013-02-06 08:18:39
【问题描述】:

我尝试了以下代码,发现 &&and 是不同的。

<?php

$keyWord =  2 and 3>4;

$symbol  =  2 &&  3>4;

echo $keyWord===$symbol ? 'equal' : 'not-equal';

输出:不相等

为什么?

【问题讨论】:

  • 不同的运算符优先级。
  • 和&&运算的情况相同,但优先级不同

标签: php logical-operators


【解决方案1】:

它们的优先级不同。完全括号内,您的代码是:

($keyWord = 2) and (3>4); // $keyWord = 2
$symbol = (2 && (3>4)); // $symbol = false

2false 显然不一样,因此'not-equal'

More on operator precedence

【讨论】:

  • $symbol = (2 &amp;&amp; (3&gt;4)); 这是正确的吗?我想应该是$symbol = (2 &amp;&amp; 3)&gt;4);
  • @PrasanthBendra Erm... 为什么?
  • &amp;&amp; 的优先级高于 &gt;
  • ($keyWord = 2) - 这不是作业吗?
  • @PrasanthBendra Erm...不,它没有!
【解决方案2】:

好吧,稍微修改一下代码:

<?php
$keyWord =  2 and 3>4;

$symbol  =  2 &&  3>4;

var_dump($keyWord);
var_dump($symbol);
?>

产生以下输出:

int(2) bool(false)

正如 Kolink 上面指出的,这是由于运算符优先级。

【讨论】:

    【解决方案3】:

    这里是逻辑运算符的优先级(表的一部分)

    left    &&  logical
    left    ||  logical
    left    ? :     ternary
    right   = += -= *= /= .= %= &= |= ^= <<= >>= =>     assignment
    left    and
    

    在你的情况下:

    case 1:
    
    $keyWord =  2 and 3>4;
    
    ($keyWord =  2) and (3>4);
    

    这里$keyWord = 2

    case 2:
    
    $symbol  =  2 &&  3>4;
    
    $symbol  =  (2 && (3>4));
    

    这里$symbol = false

    解决方案$keyWord = (2 and (3&gt;4));$symbol = 2 &amp;&amp; (3&gt;4); 使用括号

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

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 2013-04-26
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 2014-12-23
      • 2014-04-24
      • 2011-06-12
      • 2011-11-28
      相关资源
      最近更新 更多