Операторы в PHP. Как определяется их приоритетность и ассоциативность?

операторы в php. как определяется их приоритетность и
  ассоциативность?

Осмысление операторов

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

Оператор — это нечто, принимающее одно или более значений и формирующее из них новое значение. В большинстве случаев, принимаемые входящие данные должны стоять по сторонам от него. Операторы, как элементарные действия, представляются простыми символами или набором символов. Например, умножение представлено символом «*», а возведение в степень «**». Операторы, следующие друг за другом, образуют выражения. Они могут быть простыми, например - «сложить два числа и присвоить результат переменной», а могут формировать очень запутанные последовательности вычислений.

/*
* Примеры использования простых операторов
*/
//Знак "=" - это оператор присваивания
$textContent = 'Строковое значение';
//Знак "**" - это оператор возведения в степень
echo 2**3;
//Знак "." - это объединение строк
echo 'Меня зовут' . ' Руслан';


/*
* Примеры сложных выражений с операторами
*/
//Больше ли результат вычисления
//первых скобок чем вторых.
$result = (15-5) > (163/52);

//Вычисления с раскрытием скобок, а затем
//соединение числового результата со строкой
$text = 'Результат вычисления: '. (((256*3) - 10) * 3);

Унарные, бинарные и тернарный операторы

Изучим типы операторов доступных в PHP. Классификация очень проста, и состоит всего из трех видов. Два, из которых включают большое количество различных операторов, а третий всего один, но не менее важный.

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

Классификация видов операторов:

  • Унарный — принимает только одно значение, обрабатывает и выдает единственный результат. Ярким примером является оператор декремента «--», в задачи которого входит уменьшение на единицу числового значения, стоящего за ним.
  • Бинарный — принимает два значения, которые должны стоять по обе стороны от него, обрабатывает их и выдает единственный результат. Ярким примером является оператор сложения «+».
  • Тернарный — оператор имеет структуру «(входящее_значение)?(результат_если_правда):(результат_если_ложь);». Он принимает одно значение логического типа, либо выражение, результат которого автоматически преобразуется к логическому типу. Это значение должно стоять по левую сторону от знака «?». Если значение или результат выражения положителены, возвращается то, что следует сразу за знаком «?», а если отрицательны, то следующее за двоеточием «:».
//Унарный оператор инкремента "++" (увеличения на единицу)
$integer = 10;
++$integer;
var_dump($integer); //Результат: int(11)


//бинарный оператор сравнения "==" (равны ли значения)
var_dump(999 == 111); //Результат: bool(false)


//Тернарный оператор.
echo (1 == 1) ? 'Числа равны' : 'Числа не равны';
//Результат: Числа равны

Приоритетность операторов

Из математики мы знаем, что существует определенная последовательность выполнения вычислений. Если в математическом выражении явным образом не заданы скобки, то вычисления производятся согласно приоритетности[1]. Выражение «-4+5*5» будет равно «21», так как умножение происходит перед сложением, хотя записывается после него.

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

//Результат выполнения без скобок
$vithBrackets = -4+5*5;
var_dump($withBrackets); //Результат: int(21)

//Результат выполнения со скобками
$vithoutBrackets = (-4+5)*5;
var_dump($withoutBrackets); //Результат: int(5)

Важно
Мы настоятельно рекомендуем всегда использовать круглые скобки для явного задания порядка вычислений. Это улучшит качество и читаемость вашего кода, а также позволит не держать в голове информацию о приоритетности каждого оператора.

Еще одной важной чертой помимо приоритетности операторов является их ассоциативность[2]. Она может быть левой, правой или отсутствующей. С помощью неё интерпретатор самостоятельно выбирает порядок вычислений в том случае, если два рядом стоящих оператора имеют равный приоритет, и он не задан круглыми скобками.

Например, оператор сложения имеет левую ассоциативность – это значит, что оператор берет левое значение и вычитает из него правое. Согласно ассоциативности, интерпретатор самостоятельно расставит скобки в выражении «40-10-15» следующим образом «((40-10)-15)».

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

Ассоциативность Оператор
отсутствует clone new
левосторонняя [
правосторонняя **
правосторонняя ++ -- ~ (int) (float) (string) (array) (object) (bool) @
отсутствует instanceof
правосторонняя !
левосторонняя * / %
левосторонняя + - .
левосторонняя << >>
отсутствует < <= > >=
отсутствует == != === !== <>
левосторонняя &
левосторонняя ^
левосторонняя |
левосторонняя &&
левосторонняя ||
левосторонняя ? :
правосторонняя = += -= *= **= /= .= %= &= |= ^= <<= >>= =>
левосторонняя and
левосторонняя xor
левосторонняя or

Термины, использованные в статье

  1. Приоритетность операторов — величина, определяющая порядок выполнения операторов в одном выражении. Она имеет большое значение только в том случае, если вы явным образом не указали порядок с помощью круглых скобок. Оператор с большим приоритетом будет выполнен первым, а его результат будет участвовать в оставшихся операциях.
  2. Ассоциативность операторов — поведение, присущее различным операторам. Она определяет, как значения стоящие по сторонам от оператора взаимодействуют друг с другом. Например, оператор возведения в степень «**» имеет левую ассоциативность. Это значит, что в примере «2**3» (двойка в третей степени) число два это данные над которыми производится операция, а число три это атрибут операции (в какую степень возвести).

Последние публикации