正文
运算符 有 优先级 、 结合性 的性质,需要研究总结一下。
<?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