Арифметические операторы
Операторы присваивания
Битовые операторы
Операторы сравнения
Операторы обработки ошибочных ситуаций
Встроенный интерпретатор
Операторы инкремента и декремента
Логические операторы
Приоритеты вычислений
Строковые операторы
Термин «оператор» в РНР носит двойственный характер. С одной стороны, под
оператором понимается некоторая законченная конструкция — элементарный кирпичик, из которого складывается программа. С другой стороны, оператор — это
некоторое действие над выражениями, которое приводит к получению нового результата. В главе 3 мы рассмотрели первое определение оператора, а теперь спустимся ниже и рассмотрим вторую ипостась термина.
Арифметические операторы в РНР, по большому счету, ничем не отличаются от
аналогичных операторов в Си и Perl. Все они представлены в табл. 5.1.
Таблица 5.1. Арифметические операторы
Пример | Название | Результат
| $а +$b | Сложение | Сумма $а и $b
| $а -$b | Вычитание | Разность $а и $b
| $а *$b | Умножение | Произведение $а и $b
| $а /$b | Деление | Частное отделения $а на $b
| $а %$b | Деление по модулю | Остаток от целочисленного деления $а на $b
|
Оператор деления / возвращает целочисленное значение, если оба операнда являются целыми числами (или строками, которые конвертируются в целые числа).
Если же хотя бы один из операндов является вещественным числом, то результатом вычисления будет вещественное число.
Как и следует ожидать от языка, являющегося наследником Си и Perl, в качестве
оператора присваивания в РНР используется старый знакомый — «=». И точно
так же, как в Си и Perl, этот символ не используется в качестве оператора сравнения — здесь вам не тут (то есть не Паскаль)!
Значением оператора присваивания является само присваиваемое значение. Или,
говоря по-простому, значением $а = 3 будет 3. Эта особенность позволяет вам
реализовать составные операторы, например:
$а = ($b = 4) + 5;
В результате переменная $а будет равна 9, а $b получит значение, равное 4.
Кроме того, в состав РНР включены так называемые «комбинированные операторы» для всех арифметических и строковых операций, которые позволяют вам использовать значение внутри выражения, а затем присвоить некоторой переменной
его результат. Это можно сделать, например, вот так:
$а = 3;
$а += 5; // сделать $а равным 8, аналогично: $а = $а + 5;
$b = "Hello ";
$b .= "There!"; // $b равно "Hello There!", как
// при использовании записи $b = $b . "There!";
Обратите внимание, что оператор присваивания копирует первоначальную переменную в новую (присвоение по значению), поэтому изменение в одной переменной не будет оказывать влияние на другую.
прмечание
РНР поддерживает присвоение по ссылке, используя для этого синтаксис $newvar =
&$oldvar;. Присвоение по ссылке означает, что обе переменные указывают, фактически,
на одну и ту же структуру данных в памяти машины. Подробнее этот вопрос рассматривался в разделе 4.3.
Битовые операторы позволяют вам изменять отдельные биты целых чисел
(табл. 5.2).
Таблица 5.2. Битовые операторы
Пример | Название | Результат
| Sa & $b | И | В результирующем числе установлены только те биты, которые установлены ив$а,ив$b
| $а |$b | ИЛИ | В результирующем числе установлены те биты, которые были установлены либо в $а, либо в $b
| $а л$b | Исключающее ИЛИ | Устанавливаются только те биты, значения которых в $а и $b не совпадают
| - $а | Инверсия | Поразрядное инвертирование битов в $а
| $а <<: $b | Сдвиг влево | Производится сдвиг $а на $b разрядов влево (каждый шаг означает «умножение на 2»)
| $а >>: $b | Сдвиг вправо | Производится сдвиг $а на $b разрядов вправо (каждый шаг означает «разделить на 2»)
| | |
|
Операторы сравнения используются обычно внутри условий различных управляющих структур и предназначены для сопоставления между собой значений переменных и констант (табл. 5.3).
Таблица 5.3. Операторы сравнения
Пример | Название | Результат PHP4
| $а== $b | Равно | True, если $а равно $b
| $а=== $b | | True, если $а равно $b и обе переменных *принадлежат одному типу
| $а!= $b | He равно | True, если $а не равно $b
| $а!== $b | He идентично | True, если $а не равно $b или если их типы не совпадают
| Sa< $b | Меньше чем | True, если $а меньше, чем $b
| $а > $b> | Больше чем | True, если $а больше, чем $b
| $а<= $b | Меньше или равно | True, если $а меньше или равно $b
| $а>= $b | Больше или равно | True, если $а больше или равно $b
|
Существует еще один оператор сравнения — тернарный оператор «? :», заимствованный из Си и Perl, который выглядит следующим образом:
(exprl) ? (ехрr2) : (ехрrЗ);
Результатом этого выражения будет значение ехpr2, если значением exprl явля-
ется true, или ехргЗ, если значение exprl равно false.
РНР поддерживает один-единственный оператор, предназначенный для управления процессом обработки ошибочных ситуаций. Это оператор @. Если этот оператор приписан в начале PHP-выражения, то любое сообщение об ошибке, которое
может возникнуть во время выполнения этого выражения, будет проигнорировано.
Если при компиляции PHP-машины был активизирован механизм регистрации
track_errors, то любое сообщение об ошибке, генерируемое таким выражением,
будет сохранено в глобальной переменной $php_er rormsg. Следует, однако, иметь
в виду, что при каждой очередной ошибке это значение будет переписываться, поэтому вы должны проверять эту переменную после каждого «потенциально опасного» выражения.
<?php
/' Неверный оператор SQL */
$res = @pgsql_query ("select code, city from \"phoneli st") or
die ("Ошибка при выполнении запроса - '$php_errormsg'");
примечание
В настоящее время префикс @ отключает обработку даже критических ошибок, которые
обычно приводят к прекращению выполнения программы. Среди прочего, это означает,
что если вы используете @ для подавления генерации сообщений от определенной функции, но ошиблись в указании ее имени, то программ «умрет» без единого крика, не дав
вам никакой подсказки относительно причины аварийного завершения.
В настоящее время для интерпретации команд и выражений в РНР реализован
оператор ' — обратные кавычки. РНР пытается выполнить заключенную между
ними строку как команду операционной системы. Результат, возвращаемый этой
командой, становится значением этого оператора и может быть присвоен переменной. Вот как это можно использовать на практике:
<FONT SIZE=+1>
<h2>Текущий каталог</h2>
<?php
$output = 'Is -al" ;
echo "<pre>$output</pre>";
Результат работы этой программы приведен на рис. 5.1. Обратите внимание, что
выводится текущий каталог, в котором расположена выполняемая в данный момент программа.
Рис. 5.1. Вывод текущего каталога с помощью интерпретатора оболочки UNIX
совет
При активизации безопасного режима PHP-машины встроенный интерпретатор становится недоступным.
|