Изучаем PHP программирование

   Search   

Русская версия | English version   

Скрипты :: Секреты профессионалов :: Link :: FAQ   Пишите письма  



 

главная :: основы 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.

Designed by Fedin
All right reserved
2003-2004
Hosted by uCoz