PHP :: Выражения и операторы
Выражения в PHP
Выражения являются самыми важными строительными элементами в PHP, поскольку почти все, что пишется в коде является выражением.
Выражение – это любая единица исходного кода, которая может быть вычислена интерпретатором для получения значения. Другими словами, к выражению следует относить любую фразу на языке PHP, которую можно вычислить и в результате получить значение.
Выражения делятся на простые (первичные) и сложные. Простые выражения не могут быть разделены на еще более простые выражения. К ним относятся, например, константы или переменные. Сложные выражения составляются из более простых при помощи различных операторов. Примером может служить выражение $d=($a+$b)*4.
Кстати, не стоит путать понятия инструкции и выражения, поскольку они несколько отличаются по своему смысловому содержанию, т.к. выражения – это все, что вычисляется для получения значений, а инструкция – это указание на выполнение программой какого-либо действия.
Операторы и операнды
Оператор – это элемент программного кода, который используется для выполнения определенного действия в выражении.
Примерами выражений с использованием операторов могут служить $a+$b, $a=$b, $a!=$b, $a*=3, ++$b, $a||$b и др. Здесь символы и комбинации символов +, =, !=, *=, ++, || являются операторами, а выражения или значения, расположенные по сторонам операторов, называют операндами.
Ассоциативность операторов
Большинство операторов обрабатывают свои операнды в определенном направлении (см. таблицу ниже). Это свойство принято называть ассоциативностью. Одни операторы выполняют обработку своих операндов слева направо, обладая левой ассоциативностью, другие обладают правой ассоциативностью, выполняя обработку в обратном направлении, т.е. справа налево. Также существуют операторы не имеющие ассоциативности.
Приоритет операторов
Кроме того, операторы могут отличаться своим приоритетом, который определяет порядок (очередность) их выполнения в ходе вычисления значения выражения. Первыми выполняются операторы с более высоким приоритетом, затем операторы с более низким приоритетом и так далее по мере убывания их приоритетности. Если приоритет операторов одинаков, они группируются и обрабатываются согласно их ассоциативности. При этом операторы, имеющие одинаковый приоритет, но не имеющие ассоциативности, не могут использоваться друг за другом. Также отметим, что для принудительного указания порядка выполнения операторов используются круглые скобки (см. пример №1).
<?php //Теперь $a==19, т.к. приоритет оператора * выше, чем у + $a=5+7*2; echo $a.'<br>'; //Теперь $b==24, т.к. порядок был указан при помощи скобок $b=(5+7)*2; echo $b.'<br>'; $c=2; //Такое выражение недопустимо в PHP, т.к. операторы < и > //имеют равный приоритет, но не имеют ассоциативности //$a<$b>$c; //А вот так можно, т.к. скобки явно указывают порядок выполнения $a<($b>$c); //Тоже самое, что и $c=($a=$b);, т.к. все операторы имеют //равный приоритет и правую ассоциативность $c=$a=$b; //Теперь $d==-8, т.к. операторы - и - имеют равный приоритет и //левую ассоциативность, поэтому 5-6-7==(5-6)-7. Но лучше явно //указывать порядок выполнения при помощи скобок $d=5-6-7; echo $d.'<br>'; /* Старайтесь всегда использовать скобки, непосредственно определяя порядок группировки и не полагаясь на приоритет или ассоциативность операторов, поскольку такое поведение может меняться от одной версии PHP к другой!!! */ ?>
Пример №1. Использование операторов различной приоритетности и ассоциативности
Старайтесь всегда использовать скобки даже, если они необязательны, непосредственно определяя порядок группировки и не полагаясь на приоритет или ассоциативность операторов, поскольку такое поведение может изменяться от одной версии PHP к другой.
Список основных операторов PHP
Все основные операторы языка PHP перечислены в таблице №2 в порядке убывания их приоритетов. Чем ниже приоритет, тем ниже находится строка с соответствующими операторами. Если операторы имеют одинаковый приоритет, они перечисляются в одной и той же строке таблицы.
Оператор | Описание | Ассоциативность |
---|---|---|
clone new |
Создает копию объекта Создает новый объект |
Отсутствует |
** | Возведение в степень | Справа налево |
. [] () |
Доступ к свойству (точечная нотация) Индекс массива Вызов функции |
Слева направо |
~ ++ -- (bool) (integer) (float) (string) (array) (object) @ |
Битовое НЕ Оператор инкремента Оператор декремента Оператор приведения к типу bool Оператор приведения к типу integer Оператор приведения к типу float Оператор приведения к типу string Оператор приведения к типу array Оператор приведения к типу object Подавление вывода сообщений об ошибках |
Справа налево |
instanceof | Оператор проверки типа | Отсутствует |
! | Логическое НЕ | Справа налево |
* / % |
Умножение Деление Деление по модулю (остаток от деления) |
Слева направо |
+ - . |
Сложение Вычитание Конкатенация |
Слева направо |
<< >> |
Побитовый сдвиг влево Побитовый сдвиг вправо |
Слева направо |
< <= > >= |
Меньше Меньше или равно Больше Больше или равно |
Отсутствует |
== != === !== <> |
Равно Не равно Тождественно равно Тождественно не равно Не равно (аналог !=) |
Отсутствует |
& | Битовое И | Слева направо |
^ | Битовое ИЛИ-НЕ | Слева направо |
| | Битовое ИЛИ | Слева направо |
&& | Логическое И | Слева направо |
|| | Логическое ИЛИ | Слева направо |
? : | Условный (тернарный) оператор | Слева направо |
= += -= *= **= /= .= %= &= |= ^= <<= >>= => | Операторы присваивания | Справа налево |
AND | Логическое И | Слева направо |
XOR | Логическое ИЛИ-НЕ | Слева направо |
OR | Логическое ИЛИ | Слева направо |
, | Оператор «запятая» | Слева направо |
Таблица №2. Операторы языка PHP
Унарные, бинарные и тернарный операторы
Большинство операторов, приведенных в таблице, являются бинарными, т.е. используются с двумя операндами. Например, плюс +, минус -, не равно != и др. Есть также операторы, которые работают только с одним операндом, их называют унарными. К ним относятся, например, оператор инкремента ++ или оператор отрицания (унарный минус) -, который применяется для смены знака числа на противоположный. Кроме того, в PHP используется один тернарный оператор, который имеет в своем арсенале целых три операнда. Им является условный оператор ? :.
Быстрый переход к другим страницам
- Манипуляции с типами в PHP
- Выражения и операторы в PHP
- Арифметические операторы в PHP
- Вернуться к оглавлению учебника