不尝试还真不知道,居然是因为优先级的差别导致,如果是真实编程中遇到,排错就很困难了,幸亏这里看到了:

$a = true;             //声明一个布尔型变量$a,赋值为真$b = true;             //声明一个布尔型变量$b,赋值为真$c = false;            //声明一个初值为假的布尔型变量$c if($a or $b and $c){      //用or做判断    echo "真";}else{    echo "假";} echo "
"; if($a || $b and $c){      //用||做判断    echo "真";}else{    echo "假";}

输出结果:

没有错,就是“先真,后假”,就是因为and优先级比or高,而||又比and高。。。。

更多详细的优先级

运算符优先级
结合方向 运算符 附加信息
非结合 clone new clone 和 new
[ array()
非结合 ++ -- 递增/递减运算符        
非结合 ~ - (int) (float) (string) (array) (object) (bool) @ 类型        
非结合 instanceof 类型        
右结合 ! 逻辑操作符        
* / % 算术运算符        
+ - . 算术运算符 和 字符串运算符
<< >> 位运算符        
非结合 < <= > >= <> 比较运算符        
非结合 == != === !== 比较运算符        
& 位运算符 和 引用
^ 位运算符        
| 位运算符        
&& 逻辑运算符        
|| 逻辑运算符        
? : 三元运算符        
= += -= *= /= .= %= &= |= ^= <<= >>= 赋值运算符        
and 逻辑运算符
xor 逻辑运算符        
or 逻辑运算符        
, 多处用到