В PHP имеется множество мощных операторов - от арифметических, строковых и логических до операторов присваивания, сравнения и многих других операторов. Если бы у всех операторов был один и тот же уровень приоритета, то они обрабатывались бы в том порядке, в котором встречались интерпретатору. Фактически многие операторы имеют одинаковый уровень приоритета. Рассмотрим ряд операторов, представленных в примере. Прииер. Три эквивалентных выражения 1 + 2 + 3 - 4 + 52 - 4 + 5 + 3 + 15 + 2 - 4 + 1 + 3 Из примера видно, что, несмотря на перестановку чисел (и предшествующих им операторов), результат каждого выражения имеет значение 7, поскольку у oпeраторов «плюс» и «минус» одинаковый уровень приоритета. Можно проделать то же самое с операторами умножения и деления. Пример. Три выражения, которые также являются эквивалентныии 1 * 2 * 3 / 4 * 52 / 4 * 5 * 3 * 15 * 2 / 4 * 1 * 3 В этом примере получаемое значение всегда равно 7,5. Но все меняется, когда в выражении присутствуют операторы с разными уровнями приоритета, как в примере. Прииер. Три выражения, в которых присутствуют операторы с разныии уровняии приоритета 1 + 2 * 3 - 4 * 52 - 4 * 5 * 3 + 15 + 2 - 4 + 1 * 3 Если бы не существовало приоритетности операторов, то в результате вычисления этих выражений получались бы числа 25, - 29 и 12 соответственно. Но поскольку операторы умножения и деления имеют более высокий уровень приоритета по сравнению с операторами сложения и вычитания, вокруг частей выражения с их участием предполагается наличие скобок, и если их сделать видимыми, выражения будут выглядеть так, как показано в примере. Пример. Три выражения, в которых отображены предполагаемые скобки 1 + (2 * 3) - (4 * 5) 2 - (4 * 5 * 3) + 15 + 2 - 4 + (1 * 3) Очевидно, что PHP должен сначала вычислить подвыражения, заключенные в скобки, для того чтобы получились частично вычисленные выражения, показанные в примере. Пример. Выражения после вычисления подвыражений в скобках 1 + (6) - (20) 2 - (60) + 15 + 2 - 4 + (4) Окончательный результат вычисления этих выражений равен соответственно - 13, - 57 и 6 (что абсолютно отличается от результатов 25, - 29 и 12, которые мы увидели бы при отсутствии приоритетности операторов). Разумеется, исходную приоритетность операторов можно отменить, расставив собственные скобки, и принудительно получить результаты, показанные в самом начале, которые были бы получены в отсутствие приоритетности операторов. Прииер. Принудительное выполнение вычислений справа налево
((1 + 2) * 3 - 4) * 5 (2 - 4) * 5 * 3 + 1 (5 + 2 - 4 + 1) * 3 Теперь, если скобки расставлены правильно, мы видим значения 25, - 29 и 12 соответственно. В таблице снизу. перечислены операторы PHP в порядке их приоритетности от самого высокого до самого низкого уровня.
Оператор(ы)
|
Тип
|
( )
|
Скобки
|
++ - -
|
Инкремент-декримент
|
!
|
Логический
|
* . %
|
Арифметические
|
+ -
|
Арифметические и строковые
|
<< >>
|
Побитовые
|
< <= >
>= <>
|
Сравнения
|
== != === !==
|
Сравнения
|
&
|
Поразрядный ( и ссылочный)
|
^
|
Поразрядный
|
|
|
Поразрядный
|
&&
|
Логический
|
||
|
Логический
|
? :
|
Трехкомпонентный
|
= += -= *= /= .= %= &= != ^=
<<= >>=
|
Присваивания
|
and
|
Логический
|
xor
|
Логический
|
or
|
Логический
|
|