## 运算符优先级

clone new clonenew
[ array()
** 算术运算符
++ -- ~ (int) (float) (string) (array) (object) (bool) @ 类型递增／递减
instanceof 类型
! 逻辑运算符
* / % 算术运算符
+ - . 算术运算符字符串运算符
<< >> 位运算符
< <= > >= 比较运算符
== != === !== <> <=> 比较运算符
& 位运算符引用
^ 位运算符
| 位运算符
&& 逻辑运算符
|| 逻辑运算符
?? 比较运算符
? : ternary
right = += -= *= **= /= .= %= &= |= ^= <<= >>= 赋值运算符
and 逻辑运算符
xor 逻辑运算符
or 逻辑运算符

Example #1 结合方向

<?php
\$a
5// (3 * 3) % 5 = 4
// ternary operator associativity differs from C/C++
\$a true true 2// (true ? 0 : true) ? 1 : 2 = 2

\$a 1;
\$b 2;
\$a \$b += 3// \$a = (\$b += 3) -> \$a = 5, \$b = 5
?>

Operator precedence and associativity only determine how expressions are grouped, they do not specify an order of evaluation. PHP does not (in the general case) specify in which order an expression is evaluated and code that assumes a specific order of evaluation should be avoided, because the behavior can change between versions of PHP or depending on the surrounding code.

Example #2 Undefined order of evaluation

<?php
\$a
1;
echo
\$a \$a++; // may print either 2 or 3

\$i 1;
\$array[\$i] = \$i++; // may set either index 1 or 2
?>

Note: