PHP: Выражения и операторы

В этой главе:

  • Выражения

  • Операторы

  • Количество операндов

  • Типы операндов

  • Приоритет

  • Ассоциативность

  • Таблица операторов

  • Оператор присваивания

Выражения

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

1
2
3
4
5
6
7
8
9
<?php
 
  $var3 + 19
 
  //или
 
  ($alpha2 - 35) * $beta3 / 2
 
?>

Результатом выполнения всех операций, входящих в состав выражения, является значение. Значение (value) - это число, текстовая строка или логическая величина (true, false). Простейшими формами выражений являются литералы и переменные. Значением литерала является сам литерал. Примерами литералов могут служить числа, строки и константы. Переменная выражается присвоенным ей значением:

1
2
3
4
5
6
7
1                  // Числовой литерал
 
"Назад в будущее"  // Строковой литерал
 
true               // Константа (булево значение)
 
$user_name         // Переменная, содержащая к примеру строку с именем пользователя

Несмотря на то что литерал и переменную можно считать допустимыми выражениями, они не выполняют никаких действий. Чтобы получить выражение, выполняющее какое-либо действие, нужно использовать операторы. Операторы объединяют простые выражения в более сложные. Когда выражения и операторы объединяются в законченную строку программного кода, которая выполняет некоторое действие, вы получаете инструкцию.

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

Операторы

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

1
3 + 4

Числовые литералы по обе стороны от оператора + являются его операндами. Операнд - это то, на что воздействует оператор. Операнды и операторы дают в результате выражение, которое формирует новое значение.

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

При работе с операторами особое значение имеют следующие аспекты:

  • количество операндов

  • тип операндов

  • приоритет (порядок исполнения)

  • ассоциативность операторов

Количество операндов

Разные операторы принимают разное количество операндов. Операторы, которые работают с двумя операндами называются бинарными, к таким операторам относятся сложение, вычитание умножение и т.д.

Другие операторы могут принимать всего один операнд, они называются унарными. Примерами унарного оператора могут служить унарный минус (-), инкремент, декремент и т.д.

Существует также один оператор, который может работать с тремя операндами, такой оператор называется тернарный. Этим оператором является оператор, представляющий собой сокращенную форму записи условного оператора if, о котором мы поговорим позже, когда будем рассматривать условные операторы.

Типы операндов

Создавая выражения, необходимо обращать внимание на типы операндов, с которыми работает каждый из операторов, потому что каждый оператор ожидает получить операнды конкретного типа данных. Например, нельзя выполнить умножение двух строк

1
'a' * 'b'

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

1
'10' * '10'

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

Примечание: Когда PHP выполняет автоматическое преобразование типа, это называется неявным приведением типа, если преобразование типа выполняется вручную - это называется явным приведением типа.

Приоритет

Приоритет оператора определяет порядок исполнения операций при вычислении значения выражения.

Операторы с одинаковым приоритетом обрабатываются в порядке следования в выражении. Например, операции умножения и деления исполняются в том порядке, в котором следуют в выражении, потому что они имеют одинаковый приоритет.

Если выражение содержит операторы с разным приоритетом, то порядок их исполнения может влиять на конечный результат выражения. С помощью круглых скобок ( и ) можно переопределить порядок исполнения операторов или просто улучшить читаемость выражения.

1
2
3
4
5
6
<?php
 
  echo 3 * 2 + 5;     // выведет 11
  echo 3 * (2 + 5);   // выведет 21
 
?>

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

Ассоциативность

Все операторы обрабатывают свои операнды в определенном направлении. Направление обработки называется ассоциативностью и зависит от типа оператора. Большинство операторов выполняет обработку слева направо - такой порядок называется левой ассоциативностью. Левая ассоциативность подразумевает, что выражение вычисляется слева направо, правая ассоциативность - в обратном направлении.

Таблица операторов

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

В колонке "Ассоциативность" помечены операторы, которые имеют правую ассоциативность, остальные относятся к левой.

Оператор

Описание

Ассоциативность

NEW

Создает новый объект

Справа налево

.

[]

()

Доступ к свойству (точечная нотация)

Индекс массива

Вызов функции

 

!

~

++, --

+, -

(int)

(float/double/real)

(string)

(array)

(object)

@

Логическое НЕ

Битовое НЕ

Операторы инкремента и декремента

Унарный плюс и минус

Оператор приведения типа

Оператор приведения типа

Оператор приведения типа

Оператор приведения типа

Оператор приведения типа

Подавление вывода сообщений об ошибках

Справа налево

*, /, %

Умножение, деление

 

+, -

.

Сложение, вычитание

Конкатенация

 

<<, >>

Битовый сдвиг

 

<, <=, >, >=

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

 

==, !=

===, !==, <>

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

 

&

Битовое И

 

ˆ

Битовое ИЛИ-НЕ

 

|

Битовое ИЛИ

 

&&

Логическое И

 

||

Логическое ИЛИ

 

? :

Условный (тернарный) оператор

 

=, +=, -=, *=, /=, .=, %=,

&=, |=, ^=, <<=, >>=, =>

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

Справа налево

AND

Логическое И

 

XOR

Логическое ИЛИ-НЕ

 

OR

Логическое ИЛИ

 

,

Оператор запятая

 

Оператор присваивания

Для присваивания значений используется оператор присваивания обозначаемый как "=". На первый взгляд может показаться, что это оператор "равно". На самом деле это не так. Он присваивает значение, стоящее с правой стороны от него, операнду, стоящему с левой стороны:

1
2
3
4
5
<?php
 
  $i = 3;
 
?>

Левым операндом оператора = должно быть левостороннее выражение: переменная, элемент массива или свойство объекта. Правым операндом может быть любое значение, любого типа.

Оператор присваивания также позволяет создавать цепочку операций присваивания:

1

2

3

4

5

6

7

<?php
  
  $num1 = $num2 = $num3 = $num4 = 5;
 
  echo $num1, $num2, $num3, $num4;
 
?>