Приоритет оператора просто определяет, какая операция будет выполнена первой. Вы видели приоритет операторов в математике. Операторы умножения и деления выполняются перед операторами сложения и вычитания. Со всеми различными операторами, которые есть в PHP, интерпретатору необходимо знать, какую операцию выполнять в каком порядке.
Для начала рассмотрим простой математический пример:
2 + 3 * 5
Если вы не знали о приоритете операторов в математике, вы можете начать работать слева направо. Вы получите неправильный ответ: 25. Однако мы все занимались математикой и знаем, что умножение предшествует сложению, поэтому мы получаем 17.
Вам не обязательно знать приоритет каждого оператора: вы всегда можете посмотреть его, если столкнетесь с чем-то странным. Однако вам следует знать следующее:
- новый
- ** (экспоненциальный)
- ++ - (увеличение / уменьшение)
- ! (логическое нет)
- * /% (арифметический)
- + -. (арифметика / конкатенация)
- ==! = ===! == ‹› ‹=› (сравнение)
- && (логический)
- || (логично)
- ?: (тройной)
- = + = - = * = / =% = (присвоение)
- и (логично)
- xor (логический)
- или (логично)
Почему так важен приоритет операторов? Вы уже знаете, какие операции будут отдельными в математике, так что в этом такого? Больше всего проблем это может вызвать во время логических операций.
Давайте посмотрим на следующий пример:
<?php var_dump( true || !true && false ); ?>
Если бы мы работали слева направо, мы могли бы вычислить выражение следующим образом
- правда || !истинный
- правда || ложь = правда
- истина && ложь = ложь
Результат, который вы получите, ложный. Чтобы оператор OR (||) был истинным, либо левая, либо правая часть должны быть истинными (или и то, и другое). Поскольку левая часть истинна, общее выражение истинно. Чтобы оператор AND (&&) вернул истину, обе стороны должны быть истинными. Поскольку правая часть ложна, общее выражение ложно.
Конечно, мы получили неправильный результат. Давайте посмотрим на результат, если учесть приоритет операторов. В приведенном выше выражении используются следующие операторы!, && и ||. ! оператор имеет наивысший приоритет, за ним следует && и, наконец, завершается оператором || оператор. Итак, давайте посмотрим, как это выглядит.
- ! истина && ложь
- ложь && ложь = ложь
- правда || ложь = правда
На этот раз мы получим правду. Важно соблюдение приоритета операторов. Если бы мы хотели добиться результата, которого достигли в первом примере, нам пришлось бы использовать круглые скобки.
<?php var_dump( (true || !true) && false ); ?>
Когда мы используем круглые скобки, мы говорим PHP выполнить эту операцию первым. На этот раз мы получаем ложь.
Следует отметить оператор &&. Принцип работы оператора && заключается в том, что он смотрит на выражение слева, а если оно ложно, то даже не смотрит на выражение справа. Программисты PHP делают это не слишком часто, но я видел, как программисты на других языках программирования тоже использовали это свое преимущество, а иногда и в ущерб. Если вы занимались программированием любого типа с использованием библиотеки JavaScript React, вы быстро заметите, что программисты любят пользоваться этим фактом. Если выражение слева истинно, выполните некоторое содержимое справа. В React это называется условным рендерингом.
Чтобы получить полный список операторов и их приоритеты, ознакомьтесь с списком на PHP.