我尝试了以下代码,得到了&与和是不同的。
<?php
$keyWord = 2 and 3>4;
$symbol = 2 && 3>4;
echo $keyWord===$symbol ? 'equal' : 'not-equal';
输出:不等于
为什么?
它们没有相同的优先级。完全插入括号,您的代码为:
($keyWord = 2) and (3>4); // $keyWord = 2
$symbol = (2 && (3>4)); // $symbol = false
2
和false
显然不相同,因此'not-equal'
。
更多关于操作员优先级的
好吧,将代码稍微修改为:
<?php
$keyWord = 2 and 3>4;
$symbol = 2 && 3>4;
var_dump($keyWord);
var_dump($symbol);
?>
产生的输出为:
int(2) bool(false)
正如Kolink在上面指出的,这是由于运算符的优先级。
以下是逻辑运算符(表的一部分)的优先级
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