Приоритет оператора просто определяет, какая операция будет выполнена первой. Вы видели приоритет операторов в математике. Операторы умножения и деления выполняются перед операторами сложения и вычитания. Со всеми различными операторами, которые есть в PHP, интерпретатору необходимо знать, какую операцию выполнять в каком порядке.

Для начала рассмотрим простой математический пример:

2 + 3 * 5

Если вы не знали о приоритете операторов в математике, вы можете начать работать слева направо. Вы получите неправильный ответ: 25. Однако мы все занимались математикой и знаем, что умножение предшествует сложению, поэтому мы получаем 17.

Вам не обязательно знать приоритет каждого оператора: вы всегда можете посмотреть его, если столкнетесь с чем-то странным. Однако вам следует знать следующее:

  • новый
  • ** (экспоненциальный)
  • ++ - (увеличение / уменьшение)
  • ! (логическое нет)
  • * /% (арифметический)
  • + -. (арифметика / конкатенация)
  • ==! = ===! == ‹› ‹=› (сравнение)
  • && (логический)
  • || (логично)
  • ?: (тройной)
  • = + = - = * = / =% = (присвоение)
  • и (логично)
  • xor (логический)
  • или (логично)

Почему так важен приоритет операторов? Вы уже знаете, какие операции будут отдельными в математике, так что в этом такого? Больше всего проблем это может вызвать во время логических операций.

Давайте посмотрим на следующий пример:

<?php
var_dump( true || !true && false );
?>

Если бы мы работали слева направо, мы могли бы вычислить выражение следующим образом

  1. правда || !истинный
  2. правда || ложь = правда
  3. истина && ложь = ложь

Результат, который вы получите, ложный. Чтобы оператор OR (||) был истинным, либо левая, либо правая часть должны быть истинными (или и то, и другое). Поскольку левая часть истинна, общее выражение истинно. Чтобы оператор AND (&&) вернул истину, обе стороны должны быть истинными. Поскольку правая часть ложна, общее выражение ложно.

Конечно, мы получили неправильный результат. Давайте посмотрим на результат, если учесть приоритет операторов. В приведенном выше выражении используются следующие операторы!, && и ||. ! оператор имеет наивысший приоритет, за ним следует && и, наконец, завершается оператором || оператор. Итак, давайте посмотрим, как это выглядит.

  1. ! истина && ложь
  2. ложь && ложь = ложь
  3. правда || ложь = правда

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

<?php
var_dump( (true || !true) && false );
?>

Когда мы используем круглые скобки, мы говорим PHP выполнить эту операцию первым. На этот раз мы получаем ложь.

Следует отметить оператор &&. Принцип работы оператора && заключается в том, что он смотрит на выражение слева, а если оно ложно, то даже не смотрит на выражение справа. Программисты PHP делают это не слишком часто, но я видел, как программисты на других языках программирования тоже использовали это свое преимущество, а иногда и в ущерб. Если вы занимались программированием любого типа с использованием библиотеки JavaScript React, вы быстро заметите, что программисты любят пользоваться этим фактом. Если выражение слева истинно, выполните некоторое содержимое справа. В React это называется условным рендерингом.

Чтобы получить полный список операторов и их приоритеты, ознакомьтесь с списком на PHP.