php语言运算符的优先级与结合性是怎样的

PHP 语言运算符的优先级与结合性

运算符用于对数据进行各种操作。在 PHP 中,运算符的优先级和结合性决定了复合表达式中的运算顺序。

优先级

优先级决定了运算符执行的顺序。优先级较高的运算符先执行,而优先级较低的运算符后执行。PHP 中的运算符优先级从最高到最低如下:

| 优先级 | 运算符 |

|---|---|

| 1 | 圆括号 `()` |

| 2 | 一元运算符:`+ - ~ !` |

| 3 | 乘方 `` |

| 4 | 乘除取余 `* / %` |

| 5 | 加减 `+ -` |

| 6 | 移位 `<< >>` | | 7 | 比较 `== != < > <= >=` |

| 8 | 逻辑与 `&&` |

| 9 | 逻辑或 `||` |

| 10 | 条件 `? :` |

| 11 | 赋值 `=` |

| 12 | 逗号 `,` |

结合性

结合性决定了具有相同优先级的运算符执行的顺序。运算符可以具有从左到右或从右到左的结合性。

| 结合性 | 运算符 |

|---|---|

| 从左到右 | 乘除取余 `* / %`、加减 `+ -`、移位 `<< >>` | | 从右到左 | 比较 `== != < > <= >=` |

优先级和结合性的影响

考虑以下表达式:

php

$result = 10 + 2 * 3;

乘法运算符 `*` 的优先级高于加法运算符 `+`,因此乘法运算首先执行。因此,计算顺序为:

$result = 10 + (2 * 3) = 16

现在考虑这个表达式:

php

$result = 10 + 2 == 3 * 3;

比较运算符 `==` 和乘法运算符 `*` 具有相同的优先级,但比较运算符具有从右到左的结合性,而乘法运算符具有从左到右的结合性。因此,计算顺序为:

$result = (10 + 2) == (3 * 3) = false

运算符优先级表

以下是一个用于参考 PHP 运算符优先级和结合性的表:

| 运算符 | 优先级 | 结合性 |

|---|---|---|

| `()` | 1 | 从左到右 |

| `+` (一元) | 2 | 从右到左 |

| `-` (一元) | 2 | 从右到左 |

| `~` | 2 | 从右到左 |

| `!` | 2 | 从右到左 |

| `` | 3 | 从右到左 |

| `*` | 4 | 从左到右 |

| `/` | 4 | 从左到右 |

| `%` | 4 | 从左到右 |

| `+` | 5 | 从左到右 |

| `-` | 5 | 从左到右 |

| `<<` | 6 | 从左到右 |

| `>>` | 6 | 从左到右 |

| `==` | 7 | 从右到左 |

| `!=` | 7 | 从右到左 |

| `<` | 7 | 从右到左 |

| `>` | 7 | 从右到左 |

| `<=` | 7 | 从右到左 |

| `>=` | 7 | 从右到左 |

| `&&` | 8 | 从左到右 |

| `||` | 9 | 从左到右 |

| `? :` | 10 | 从右到左 |

| `=` | 11 | 从右到左 |

| `,` | 12 | 从左到右 |

使用括号控制操作顺序

括号可以用来控制表达式的操作顺序。优先级最高的括号内的表达式首先执行。考虑以下表达式:

php

$result = (10 + 2) * 3;

括号强制加法运算符 `+` 优先于乘法运算符 `*`,因此计算顺序为:

$result = (10 + 2) * 3 = 36

总结

了解 PHP 运算符的优先级和结合性对于编写清晰和高效的代码至关重要。通过正确的运算符使用,可以避免意外的结果并确保代码按预期执行。