Приоритеты выполнения операторов в PHP
Приоритет операторов определяет, насколько "тесно" связанны между собой два выражения. Например, выражение 1 + 5 * 3 вычисляется как 16, а не 18, поскольку операция умножения ("*") имеет более высокий приоритет, чем операция сложения ("+"). В случае, если операторы имеют одинаковый приоритет, они будут выполняться слева направо. Круглые скобки могут использоваться для принудительного указания необходимого порядка выполнения операторов. Например, выражение (1 + 5) * 3 вычисляется как 18.
В следующей таблице приведен список операторов, отсортированный по убыванию их приоритетов. Операторы, размещенные в одной строке имеют одинаковый приоритет и порядок их выполнения опроделяется исходя из их ассоциативности.
Операторы с более высоким уровнем приоритета выполняются в первую очередь:
Приоритет |
Оператор |
Порядок выполнения |
13 |
(постфикс)++ (постфикс)-- |
слева направо |
12 |
++(префикс) --(префикс) |
справа налево |
11 |
* / % |
слева направо |
10 |
+ - |
слева направо |
9 |
<< >> |
слева направо |
8 |
< <= > >= |
слева направо |
7 |
== != |
слева направо |
6 |
& |
слева направо |
5 |
^ |
слева направо |
4 |
| |
слева направо |
3 |
&& |
слева направо |
2 |
|| |
слева направо |
1 |
= += -= *= /= %= >>= <<== &= ^= |= |
справа налево |
Пример порядка выполнения операторов (ассоциативность):
<?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2
$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
?>
В любом случае, если вы сомневаетесь, или боитесь ошибиться, используйте круглые скобки. Это также позволит сделать ваш код более читабельным.