главная :: основы PHP
Выражения
Выражение описывает некоторое действие, выполняемое в программе. Каждое выражение состоит по крайней мере из одного операнда и
одного или нескольких операторов. Прежде чем переходить к примерам, демонстрирующим использование выражений, необходимо поближе
познакомиться с операторами и операндами.
Операнды
Операнд представляет собой некоторую величину, обрабатываемую в программе. Операнды могут относиться к любому типу данных,
представленному в главе 2. Вероятно, вы уже знакомы с концепциями обработки и использования операндов не только в повседневных
математических вычислениях, но и по прежнему опыту программирования. Примеры операндов:
$а++; // $а - операнд
$sum = $val1 + $val2; // $sum. $val1 и $val2 - операнды
Операторы
Оператор представляет собой символическое обозначение некоторого действия, выполняемого с операндами в выражении. Многие
операторы известны любому программисту, но вы должны помнить, что РНР выполняет автоматическое преобразование типов на основании
типа оператора, объединяющего два операнда, — в других языках программирования это происходит не всегда.
Приоритет и ассоциативность операторов являются важными характеристиками языка программирования (см. раздел «Ассоциативность
операторов» этой главы). В табл. 3.1 приведен полный список всех операторов, упорядоченных по убыванию приоритета. Приоритет,
ассоциативность и сами операторы подробно рассматриваются в разделах, следующих за таблицей.
Таблица 3.1. Операторы РНР
Оператор
Ассоциативность
Цель
( )
-
Изменение приоритета
new
-
Создание экземпляров объектов
! ~
П
Логическое отрицание, поразрядное
отрицание
++ --
П
Инкремент, декремент
@
П
Маскировка ошибок
/ * %
Л
Деление, умножение, остаток
+ - .
Л
Сложение, вычитание,
конкатенация
<< >>
Л
Сдвиг влево, сдвиг вправо
(поразрядный)
< <= > >=
-
Меньше, меньше или равно, больше,
больше или равно
== != === <>
-
Равно, не равно, идентично, не
равно
& ^ |
Л
Поразрядные операции AND, XOR
и OR
&& ||
Л
Логические операции AND и OR
?:
П
Тернарный оператор
= += *= /= .=
П
Операторы присваивания
%= &= |= ^=
<<= >>=
AND XOR OR
Л
Логические операции AND, XOR и
OR
После знакомства с концепциями операторов и операндов следующие примеры выражений выглядят значительно понятнее:
$а = 5; // Присвоить целое число 5 переменной $а
$а = "5": // Присвоить строковую величину "5" переменной $а
$sum = 50 + $some_int; // Присвоить сумму 50 + $some_int переменной $sum
Swine = "Zinfandel"; // Присвоить строку "Zinfandel" переменной $wine
$inventory++: // Увеличить значение $inventory на 1
Объединяя операторы и операнды, вы получите более сложные выражения для выполнения нетривиальных вычислений. Пример:
$total_cost = $cqst + (Scost * 0.06): // прибавить к цене 6-процентный налог
Приоритет операторов
Приоритет является характеристикой операторов, определяющей порядок выполнения действий с окружающими операндами. В РНР
используются те же правила приоритета, что и в школьном курсе математики. Пример:
$total_cost = $cost + $cost * 0.06;
Приведенная команда эквивалентна следующей:
$total cost = $cost + ($cost * 0.06);
Это объясняется тем, что оператор умножения обладает более высоким приоритетом по сравнению с оператором сложения.
Ассоциативность операторов
Ассоциативность оператора определяет последовательность выполнения операторов с одинаковым приоритетом (см. табл. 3.1). Выполнение
может происходить в двух направлениях: либо слева направо, либо справа налево. При ассоциативности первого типа операции, входящие в
выражение, выполняются слева направо. Например, команда
$value = 3*4*5*7*2;
эквивалентна следующей команде:
$value = ((((3 * 4) * 5) * 7) * 2);
Результат вычислений равен 840. Это объясняется тем, что оператор умножения (*) обладает левосторонней ассоциативностью. Операторы с
правосторонней ассоциативностью и одинаковым приоритетом обрабатываются справа налево. Например, фрагмент
$с = 5;
$value = $а - $b - $с;
эквивалентен фрагменту
$c = 5;
$value = ($а - ($b - $с));
При обработке этого выражения переменным $value, $a, $b и $с будет присвоено значение 5. Это объясняется тем, что оператор присваивания
(=) обладает правосторонней ассоциативностью.
Математические операторы
Математические операторы (табл. 3.2) предназначены для выполнения различных математических операций и часто применяются в
большинстве программ РНР. К счастью, их использование обходится без проблем.
Таблица 3.2. Математические операторы
Пример
Название
Результат
$а + $b
Сложение
Сумма $а и $b
$а-$b
Вычитание
Разность $а и $b
$а*$b
Умножение
Произведение $а и $b
$а/$b
Деление
Частное от деления $а на $b
$а % $b
Остаток
Остаток от деления $а на $b
РНР содержит широкий ассортимент стандартных математических функций для выполнения основных преобразований и вычисления
логарифмов, квадратных корней, геометрических величин и т. д. За обновленным списком таких функций обращайтесь к документации.
Операторы присваивания
Операторы присваивания задают новое значение переменной. В простейшем варианте оператор присваивания ограничивается изменением
величины, в других вариантах (называемых сокращенными операторами присваивания) перед присваиванием выполняется некоторая
операция. Примеры таких операторов приведены в табл. 3.3.
Таблица 3.3. Операторы присваивания
Пример
Название
Результат
$а = 5;
Присваивание
Переменная $а равна 5
$а += 5;
Сложение с
присваиванием
Переменная $а равна сумме $а и 5
$а *= 5;
Умножение с
присваиванием
Переменная $а равна произведению $а
и 5
$а/=5;
Деление с
присваиванием
Переменная $а равна частному
отделения $а на 5
$а .= 5;
Конкатенация с
присваиванием
Переменная $а равна конкатенации $а
и 5
Умеренное использование операторов присваивания обеспечивает более наглядный и компактный код.
Строковые операторы
Строковые операторы РНР (табл. 3.4) обеспечивают удобные средства конкатенации (то есть слияния) строк. Существует два строковых
оператора: оператор конкатенации (.) и оператор конкатенации с присваиванием (.=), описанный в предыдущем разделе «Операторы
присваивания».
Конкатенацией называется объединение двух и более объектов в единое целое.
Таблица 3.4. Строковые операторы
Пример
Название
Результат
$a = "abc"."def"
Конкатенация
Переменной $а присваивается
результат конкатенации $а и $b
$а - "ghijkl"
Конкатенация с
присваиванием
Переменной $а присваивается
результат конкатенации ее
текущего значения со строкой
"ghijkl"
Пример использования строковых операторов:
// $а присваивается строковое значение "Spaghetti & Meatballs" $а = "Spaghetti" . "& Meatballs"
// $а присваивается строковое значение "Spaghetti & Meatballs are delicious" $a .= "are
delicious";
Конечно, два строковых оператора не исчерпывают всех возможностей РНР по обработке строк. За полной информацией об этих
возможностях обращайтесь к главе 8.
Операторы инкремента и декремента
Удобные вспомогательные операторы инкремента (++) и декремента (--), приведенные в табл. 3.5, делают программу более наглядной и
обеспечивают укороченную запись для увеличения или уменьшения текущего значения переменной на 1.
Таблица 3.5. Операторы инкремента и декремента
Пример
Название
Результат
++$а, $а++
Инкремент
Переменная $а
увеличивается на 1
--$а, $а--
Декремент
Переменная $а
уменьшается на 1
Интересный факт: эти операторы могут располагаться как слева, так и справа от операнда. Действия, выполняемые оператором, зависят от
того, с какой стороны от операнда он находится. Рассмотрим следующий пример:
$inventory = 15; // Присвоить Sinventory целое число 15
$old_inv = Sinventory--; // СНАЧАЛА присвоить $old_inv значение
// Sinventory. а ЗАТЕМ уменьшить Sinventory.
$orig_iinventory = ++inventory;// СНАЧАЛА увеличить Sinventory. а ЗАТЕМ
// присвоить увеличенное значение Sinventory
// переменной $orig_inventory.
Как видите, расположение операторов инкремента и декремента оказывает сильное влияние на результат вычислений.
Логические операторы
Логические операторы (табл. 3.6) наряду с математическими операторами играют важную роль в любом приложении РНР, обеспечивая
средства для принятия решений в зависимости от значения переменных. Логические операторы позволяют управлять порядком выполнения
команд в программе и часто используются в управляющих конструкциях (таких, как условная команда i f, а также циклы for и while).
Таблица 3.6. Логические операторы
Пример
Название
Результат
$а && $b
Конъюнкция
Истина, если истинны оба операнда ,
$aAND$b
Конъюнкция
Истина, если истинны оба операнда
$а И $b
Дизъюнкция
Истина, если истинен хотя бы один из
операндов
$а OR $b
Дизъюнкция
Истина, если истинен хотя бы один из
операндов
!$а
Отрицание
Истина, если значение $а ложно
NOT !$a
Отрицание
Истина, если значение $а ложно
$а XOR $b
Исключающая
дизъюнкция
Истина, если истинен только один из
операндов
Логические операторы часто используются для проверки результата вызова функций:
file_exists("filename.txt") OR print "File does not exist!";
Возможен один из двух вариантов:
файл filename.txt существует;
будет выведено сообщение: «File does not exist!».
Операторы равенства
Операторы равенства (табл. 3.7) предназначены для сравнения двух величин и проверки их эквивалентности.
Таблица 3.7. Операторы равенства
Пример
Название
Результат
$a==$b
Проверка равенства
Истина, если $а и $b равны
$а != $b
Проверка неравенства
Истина, если $а и $b не равны
$а === $b
Проверка идентичности
Истина, если $а и $b равны и
имеют одинаковый тип
Даже опытные программисты часто допускают одну распространенную ошибку — они пытаются проверять равенство двух величин,
используя всего один знак равенства (например, $а = $b). Помните, при такой записи значение $b присваивается $а, и желаемый результат не
будет достигнут.
Операторы сравнения
Операторы сравнения (табл. 3.8), как и логические операторы, позволяют управлять логикой программы и принимать решения при сравнении
двух и более переменных.
Таблица 3.8. Операторы сравнения
Пример
Название
Результат
$a<$b
Меньше
Истина, если переменная $а меньше $b
$a>$b
Больше
Истина, если переменная $а больше $b
$a <= $b
Меньше или
равно
Истина, если переменная $а меньше или
равна $b
$a >= $b
Больше или
равно
Истина, если переменная $а больше или
равна $b
($a-12)?5: -1
Тернарный
оператор
Если переменная $а равна 12,
возвращается значение 5, а если не равна
— возвращается 1
Обратите внимание: операторы сравнения предназначены для работы только с числовыми значениями. Хотя возникает искушение
воспользоваться ими для сравнения строк, результат, скорее всего, окажется неверным. В РНР существуют стандартные функции для
сравнения строковых величин. Эти функции подробно рассматриваются в главе 8.
Поразрядные операторы
Поразрядные операторы выполняют операции с целыми числами на уровне отдельных битов, составляющих число. Чтобы лучше понять
принцип их работы, необходимо иметь хотя бы общее представление о двоичном представлении десятичных чисел. В табл. 3.9 приведены
примеры десятичных чисел и соответствующих им двоичных представлений.
Таблица 3.9. Десятичные числа и их двоичные представления
Десятичное целое
Двоичное представление
2
10
5
101
10
1010
12
1100
145
10010001
1 452 012
1011000100111111101100
Поразрядные операторы, перечисленные в табл. 3.10, представляют собой особый случай логических операторов, однако они приводят к
совершенно иным результатам.
Таблица 3.10. Поразрядные операторы
Пример
Название
Результат
$а&$b
Конъюнкция
С битами, находящимися в одинаковых разрядах
$а и $b, выполняется операция конъюнкции
$а|$Ь
Дизъюнкция
С битами, находящимися в одинаковых разрядах
$а и $b, выполняется операция дизъюнкции
$а^$b
Исключающая
С битами, находящимися в одинаковых разрядах
$а и $b, выполняется операция исключающей
дизъюнкции
~$b
Отрицание
Все разряды переменной $b инвертируются
$а <<
$b
Сдвиг влево
Переменной $а присваивается значение $b,
сдвинутое влево на два бита
$а >>
$b
Сдвиг вправо
Переменной $а присваивается значение $b,
сдвинутое вправо на два бита
Если вам захочется больше узнать о двоичном представлении и поразрядных операторах, я рекомендую обратиться к обширному электронному
справочнику Рэндалла Хайда (Randall Hyde) «The Art of Assembly Language Programming», доступному по адресу
http://webster.cs.ucr.edu/Page_asm/Page_asm.html. Это лучший из ресурсов, которые мне когда-либо встречались в Web.
|