先看一道面试题:
$a = 0;
$b = 0;
if ($a = 3 > 0 || $b = 3 > 0) {
$a++;
$b++;
echo '$a= '.$a . "\n";
echo '$b= '.$b;
}
看上去好像不难,看得出最终的打印结果是怎样的吗?
$a= 1
$b= 1
这是为什么呢?
这里就涉及到了PHP中的逻辑运算符优先级问题了
官方文档:http://php.net/manual/zh/language.operators.precedence.php
下图为PHP的逻辑运算符的优先级顺序:
原因就是在 if 判断的时候,先是运算了 3>0,然后运算 ||,因为 3>0 为true,所以 || 运算符把后面的表达式跳过了,
结果$a = true ,$b并没有执行到赋值
而下面的 $a++ 操作对于true而言是无效的,所以$a输出的时候还是1,而$b在一开始被赋值为0,进行++操作后就变为了1
最终的输出结果就会是
$a= 1
$b= 1