&安培;&安培;和'和'在PHP中是一样的?

时间:2013-02-21 05:08:32

标签: php logical-operators

我尝试了以下代码并且&& 不同。

<?php

$keyWord =  2 and 3>4;

$symbol  =  2 &&  3>4;

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

输出:不等于

为什么?

3 个答案:

答案 0 :(得分:9)

他们没有相同的优先权。完全括约,您的代码是:

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

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

More on operator precedence

答案 1 :(得分:3)

好吧,稍微改变代码:

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

$symbol  =  2 &&  3>4;

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

产生一个输出:

int(2) bool(false)

正如Kolink所指出的,这是由于运营商的优先权。

答案 2 :(得分: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