2

我尝试了以下代码并得到了&&并且是不同的。

<?php

$keyWord =  2 and 3>4;

$symbol  =  2 &&  3>4;

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

输出:不等

为什么?

4

3 回答 3

9

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

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

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

有关运算符优先级的更多信息

于 2013-02-21T05:13:39.377 回答
3

好吧,将代码稍微更改为:

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

$symbol  =  2 &&  3>4;

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

产生以下输出:

int(2) bool(false)

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

于 2013-02-21T05:15:02.363 回答
2

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

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>4));$symbol = 2 && (3>4);使用括号

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

于 2013-02-21T05:20:57.713 回答