运算符优先级表

下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。

说明:左 = 从左到右,右 = 从右到左。

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

注意

运算符优先级中,or 和 ||,&& 和 and 都是逻辑运算符,效果一样,但是其优先级却不一样。

  1. 与: “&&” 比 “and” 的优先级高
  2. 或: “||” 比 “or” 的优先级高

括号的使用

通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。

  1. <?php
  2. // 括号优先运算
  3. $a = 1;
  4. $b = 2;
  5. $c = 3;
  6. $d = $a + $b * $c;
  7. echo $d; // 先乘除后加减,1+2*3, 输出 7
  8. $e = ($a + $b) * $c; // 使用括号
  9. echo $e; //先算括号内的,再乘,(1+2)*3, 输出 9