Найти в Дзене

Приоритет операторов PHP

На всякий случай напомню:

  • Выражение - это конструкция языка, которая используется для вычисления значения.
  • Операнд - это часть выражения. Обычно это переменная или константа.
  • Оператор выполняет какие-либо действия над операндами. Например, оператор + выполняет сложение двух операндов. Большинство операторов работают с двумя операндами (это бинарные операторы), но есть и такие, которые работают с одним операндом (унарные операторы). Также бывают операторы, которые работают с большим количеством операндов, но это редкость.
  • Операторы в языках программирования, также как и в математике, имеют приоритет - очередность выполнения.

Например, в этом выражении:

2 + 3 * 2

Сначала выполняется операция умножения (3 * 2), а потом к результату прибавляется число 2. В итоге результатом выражения будет число 8. Впрочем, не надо быть программистом, чтобы это понять - всё это мы знаем из математики. Однако в программировании есть и много других операторов. Если говорить о языке РНР, то список операторов с приоритетами приведён в таблице ниже.

Многие из операторов РНР были позаимствованы из языков С и Perl. Ну а саму таблицу я позаимствовал из одной книги по РНР (надеюсь, её автор на меня не сильно обидится, поскольку это общедоступная информация).

Колонка П в таблице означает приоритет оператора - от самого высокого до самого низкого. Хотя лично для меня такая очередность не является интуитивно-понятной. Я привык к тому, что высший приоритет имеет номер 1 (поскольку высший приоритет - это первая очередь). Но, как говорится, художник так видит. Так что вверху таблицы операторы с высшим приоритетом.

Например, оператор умножения (*) в таблице имеет приоритет 16 и находится выше оператора сложения с приоритетом 15. Это означает, что в случае, когда в одном выражении используется несколько операторов, например * и +, то сначала будет выполнена операция умножения (операция с высшим приоритетом), а потом - операция сложения (операция с низшим приоритетом).

Не обязательно запоминать все эти приоритеты. Я никогда этого не делаю, поскольку работаю с разными языками, и всё запомнить невозможно. Чтобы не ошибиться в приоритете, достаточно использовать простое правило, которое работает почти во всех языках:

Повысить приоритет можно с помощью круглых скобок

Например:

(2 + 3) * 2

Здесь сначала будет выполнено сложение, а потом - умножение, несмотря на то, что оператор умножения имеет более высокий приоритет по сравнению со сложением. Но с помощью круглых скобок мы “короновали” оператор сложения и сделали операцию сложения более важной в иерархии приоритетов.

Столбец ПВ в таблице означает порядок выполнения, который может быть:

  • Л - операция выполняется слева направо
  • П - операция выполняется справа налево
  • Н - неассоциативный оператор

Большая часть операций выполняется слева направо. То есть если операторы имеют одинаковый приоритет, то в выражении они выполняются слева направо:

2 + 3 + 4

здесь сначала к 2 прибавляем 3, а потом к результату прибавляем 4. Неассоциативные операторы выполняют операции, где порядок выполнения неважен. У некоторых операндов порядок выполнения справа налево. Но я что-то с ходу не смог придумать хорошего примера, а время, которое я отвёл на написание статьи, уже закончилось )))) Так что если у кого есть пример - пишите в комментариях.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.