Конспект по начертательной
геометрии
Начертательная геометрия
Практикум решения задач
Геометрические основы
Инженерная графика
ЕСКД
Каталог графических примеров
Архитектура ЭВМ
Информатика и
информационные технологии
Конспект лекций по ядерной физике
ТОЭ
Физические законы механики
Волны оптика
Электротехника
Общая электротехника
Решение задач по
электротехнике
Язык программирования
MATLAB
Расчет электрических цепей
Моделирование цепей
переменного тока
Дифференциальные уравнения
Вычислительныe системы
Вычислительные комплексы
Электротехнические материалы
Теория конструктивных
материалов
Учебник PHP
Турбо Паскаль
Встроенный ассемблер
Turbo Vision
Java
Примеры программирования
на Java
Примеры скриптов
История искусства 18-19 век
Учебник PHP Интернет технологии

В этой главе представлены некоторые аспекты, играющие исключительно важную роль в любом языке программирования, - а именно, выражения, операторы и управляющие конструкции. Этот материал необходим в первую очередь при создании больших и сложных приложений РНР. Если вы уже знакомы с такими языками, как С и Java, эта глава всего лишь напомнит известные вам понятия. Если же вы впервые встречаетесь с этими терминами и понятиями, которые они обозначают, знание материала этой главы будет безусловно необходимо для понимания остальных глав книги.

Выражения

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

Операнды

Операнд представляет собой некоторую величину, обрабатываемую в программе. Операнды могут относиться к любому типу данных, представленному в главе 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 существует;
будет выведено сообщение: .
Операторы равенства

Операторы равенства (табл. 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) , доступному по адресу http://webster.cs.ucr.edu/Page_asm/Page_asm.html. Это лучший из ресурсов, которые мне когда-либо встречались в Web.

Начертательная геометрия и инженерная графика, перспектива