PHP 运算符优先级
运算符优先级(运算顺序)是反映有关首先执行哪些过程以计算给定表达式的约定的规则。
例如,乘法的优先级高于加法。因此,表达式 1 + 2 × 3 被解释为具有值 1 + (2 × 3) = 7,而不是 (1 + 2) × 3 = 9。当表达式中使用指数时,它优先于两者加法和乘法。因此 3 + 52 = 28 和 3 × 52 = 75。
运算符关联性
运算符关联性是方向其中计算表达式。例如:
$x = 10;
$y = 20;
// = 运算符的结合性是
//从左到右,因此x将变为20
$x = $y;
由于=的结合性是从左到右。因此,x 被赋予 y 的值。
示例:
下面的示例说明了 PHP 中的运算符优先级。
<?php
//首先计算 5 * 2
$retval1 = 15 - 5 * 2;
//上面的表达式相当于
$retval2 = 15 - (5 * 2);
//强制编译器首先计算 15 - 5
$retval3 = (15 - 5) * 2;
echo "15 - 5 * 2 = $retval1 \n";
echo "15 - (5 * 2) = $retval2 \n";
echo "(15 - 5) * 2 = $retval3 \n";
?>
上述代码的输出将是:
15 - 5 * 2 = 5
15 - (5 * 2) = 5
(15 - 5) * 2 = 20
PHP 运算符优先级表
下表列出了 PHP 运算符的优先级和关联性。运算符按优先级降序从上到下列出。优先级较高的运算符先于优先级相对较低的运算符进行计算。当运算符具有相同优先级时,运算符的结合性决定了运算的执行顺序。
优先级 | 运算符 | 描述 | 关联性 |
---|---|---|---|
25 | clone | 克隆运算符 | NA |
new | 新运算符 | ||
24 | ** | 求幂 | 从右到左 |
23 | ++a --a | 前缀递增,前缀递减 | NA |
a++ a-- | 后缀递增、后缀递减 | ||
+a -a | 一元加,一元减 | ||
~ | 按位取反 | ||
(int) (float) (string) (array) (object) (bool) | 类型转换 | ||
@ | 错误控制运算符 | ||
22 | instanceof | 类型运算符 | 从左到右 |
21 | ! | 逻辑非 | NA |
20 | * / % | 乘法、除法、求余 | 从左到右 |
19 | + - . | 加法、减法、连接运算符(. PHP 8.0.0 之前的版本) | |
18 | << >> | 按位左移和右移 | |
17 | . | 连接运算符(从 PHP 8.0.0 开始) | |
16 | < <= > >= | 小于、小于或等于、大于、大于或等于 | 非关联 |
15 | == != | 等于、不等于 | |
==== !== | 严格等,严格不等 | ||
<> <=> | 不等于,太空船操作符、结合比较运算符 | ||
14 | & | 按位与和引用运算符 | 从左到右 |
13 | ^ | 按位异或 | |
12 | | | 按位或 | |
11 | && | 逻辑与 | |
10 | || | 逻辑或 | |
9 | ?? | 空合并运算符 | 从右到左 |
8 | a?b:c | 条件(三元)运算符 | 非关联(PHP 8.0 之前从左到右关联 .0) |
7 | = | 直接赋值 | 从右到左 |
+= -= *= /= %= **= | 通过加、减、乘、除、求余和求幂进行复合赋值 | ||
.= ??= | 连接赋值运算符、Null 合并赋值运算符 | ||
<<= >>= | 按位左移和右移复合赋值 | ||
&= ^= |= | 按位 AND、XOR 和 OR 进行复合赋值 | ||
6 | yield from | 生成器委托 | NA |
5 | yield | 生成器函数 | |
4 | 打印 | ||
3 | and | 逻辑与 | 从左到右 |
2 | xor | 逻辑异或 | |
1 | or | 逻辑或 |