正文
运算符 有 优先级 、 结合性 的性质,需要研究总结一下。
<?php
$a = 1;
echo $a++; // 1
echo $a; // 2
echo ++$a; // 3
echo $a; // 3
<?php
if (1 || 0 && 1) {
}
1 && 0 || 1 是说 (1 && 0) || 1,
1 AND 0 && 1 是说 1 && (0 || 1);
$a = $b && $c; 是说 $a = ($b && $c);,
$a = $b AND $c; 是说 ($a = $b) AND $c;;
运算符分类
这里只简单写一下,详细内容参阅手册 。
- 算术运算符
+ 加法/标识 、 - 减法/取反 、 * 乘法 、 / 除法 、 % 取模 、 ** 求幂
- 赋值运算符
= 赋值运算符 、 = & 引用赋值 、 += 算术赋值运算符 、
位赋值运算符: &= 按位与 、 |= 按位或 、 ^= 按位异或 、 <<= 左移 、 >>= 右移 、
其他赋值运算符: .= 字符串拼接 、 ??= NULL 合并
- 位运算符
& And(按位与) 、 | Or(按位或) 、 ^ Xor(按位异或) 、 ~ Not(按位取反) 、 << Shift left(左移) 、 >> Shift right(右移)
- 比较运算符
== 、 === 、 != 、 <> 、 !== 、 < 、 > 、 <= 、 >= 、 <=> 太空船运算符(组合比较符)
- 错误控制运算符
@
- 执行运算符
`
反引号
- 递增/递减运算符
++ 、 --
- 逻辑运算符
and 、 or 、 xor 、 ! 、 && 、 ||
- 字符串运算符
. 连接运算符 、 .= 连接赋值运算符
- 数组运算符
+ 联合 、 == 相等 、 === 全等 、 != 不等 、 <> 不等 、 !== 不全等
- 类型运算符
instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例。
instanceof 在功能上有个 类似的变体 is_a()。
运算符优先级
运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号(“*”)的优先级比加号(“+”)高。 必要时可以用括号来强制改变优先级。例如:(1 + 5) * 3 的值为 18。
如果运算符优先级相同,那运算符的结合方向决定了该如何运算。例如,”-“是左联的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 并且结果是 -4. 另外一方面,”=”是右联的,所以 $a = $b = $c 等同于 $a = ($b = $c)。
没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的。 但另外一方面表达式 1 <= 1 == 1 是合法的, 因为 == 的优先级低于 <=。
下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。

注意 优先级 、 结合性 两个属性。
参考资料
PHP 手册 语言参考 运算符 https://www.php.net/manual/zh/language.operators.php