Операции сравнения выполняют сравнение двух значений. Выражения, в которых присутствуют эти операции, возвращают в зависимости от результата сравнения логические значения true (истина) или false (ложь).
Операции равенства == (два знака равно) позволяют проверить равенство двух значений. Например:
$a == $b
Так проверяется равенство значений, хранящихся в переменных $a и $b. Результатом этого выражения будет true, если они равны, или false, если они не равны.
Эту операцию легко спутать с операцией присваивания. Это не приведет к выводу сообщения об ошибке, но в общем случае не даст результата, на который вы, возможно расчитывали. В общем случае любые нулевые значения интерпретируются как true, а нулевые — как false. Предположим, что две переменные были инициализированы следующим образом:
$a = 5;
$b = 7;
Если затем проверить результат операции $a =$b, получится значение true. Почему? Значением выражения $a =$b будет значение, присвоенное левому операнду, которое в данном случае равно 7. Это не нулевое значение, поэтому выражение вычисляется как true. Если же вашей целью была проверка выражения $a = = $b, результат которого равен false, значит, в коде допущена логическая ошибка, которую исключительно трудно обнаружить. Всегда следует проверять правильность использования этих двух операций, чтобы убедится, что вы их не перепутали и выбрали именно ту, которая нужна.
Подобного рода ошибку очень легко допустить, и, вероятно, вы будите их совершать в своей программистской деятельности.
РНР поддерживает также ряд других операций сравнения, которые перечислены в таблице 3. Обратите внимание на операцию проверки идентичности, которая возвращает значение true только в том случае, если оба операнда равны и имеют один и тот же тип. Например, 0 =='0' даст true, тогда как 0 === '0' — false, поскольку первый 0 представляет собой целое число, а второй строку.
Таблица 3. Операции сравнения РНР
Операция | Название | Использование |
== | равно | $a == $b |
=== | идентично | $a ==== $b |
!= | не равно | $a != $b |
!== | не идентично | $a !== $b |
<> | не равно | $a <> $b |
< | меньше | $a < $b |
> | больше | $a > $b |
<= | меньше или равно | $a <= $b |
>= | больше или равно | $a >= $b |
Логические операции служат для комбинирования результатов логических условий. Например, нас может интересовать случай, когда значение переменной $a находится в диапазоне между 0 и 100. В этом случае потребуется проверить условия $a >= 0 и $a<= 100, используя операцию логического И (AND), как продемонстрировано в следующем примере:
$a >= 0 && $a <= 100
PHP поддерживает логические операции AND (И), OR (ИЛИ), XOR (исключающее ИЛИ) и NOT (НЕ).
Таблица 4. Логические операции РНР
Операция | Название | Использование | Результат |
! | НЕ | !$b | Возвращается true, если значение $a равно false, и наоборот. |
&& | И | $a && $b | Возвращается true, если обе переменные $a и $b имеют значение true; в противном случае возвращается false. |
|| | ИЛИ | $a || $b | Возвращается true, если любая из переменных $a или $b или обе имеют значение true; иначе возвращается false. |
and | И | $a and $b | Та же, что и &&, но с меньшим приоритетом. |
or | ИЛИ | $a or $b | Та же, что и ||, но с меньшим приоритетом. |
Операции and и or обладают меньшим приоритетом, нежели операции && и ||.
Поразрядные операции позволяют обрабатывать целые числа как последовательность представляющих их разрядов. Используются эти операции не очень часто.
Таблица 5. Поразрядные операции
Операция | Название | Использование | Результат |
& | поразрядное И | $a & $b | Разряды переменных $a и $b, установленные в единичные состояния, устанавливаются в единичные состояния в результате. |
| | поразрядное ИЛИ | $a | $b | Разряды переменных $a и $b, установленные в единичные состояния, устанавливаются в единичные состояния в результате. |
- | поразрядное НЕ | -$a | Разряды переменных $a и $b, установленные в единичные состояния, устанавливаются в нулевые состояния в результате и наоборот. |
^ | поразрядное исключающее ИЛИ | $a ^ $b | Разряды переменных $a и $b, установленные в единичные состояния, но не в обееих переменных, устанавливаются в единичные состояния в результате. |
<< | сдвиг влево | $a << $b | Разряды в переменной $a сдвигаются влево на $b позиций. |
>> | сдвиг вправо | $a >> $b | Разряды в переменной $a сдвигаются вправо на $b позиций. |
В дополнение к рассмотренным выше операциям существует также множество других.
Операция запятой (,) используется для разделения аргументов функций и элементов других списков. Обычно она применяется по мере необходимости. Две специальных операции new и -> используются, соответственно, для создания экземпляра класса и для доступа к элементам класса.
Существуют еще три операции, которые мы рассмотрим.
Тернарная операция, а именно, ?:. Она записывается в следующей форме:
условие ? значение, если условие истинно : значение, если условие ложно
Например:
($grade > 50 ? 'Сдан' или 'Не сдан ');
Это выражение содержательно интепретирует оценку ($grade), полученную студентом на экзамене, как 'Сдан' или 'Не сдан'.
Операция подавления ошибки @ может использоваться перед любым выражением, т.е. перед любой конструкцией, которая генерируеи или имеет значение. Например:
$a = @ (57/0);
Без операции @ эта строка будет генерировать предупреждение о делении на ноль. При наличии операции @ вывод сообщения об ошибке подавляется.
В случае такого подавления сообщений об ошибках потребуется предусмотреть некоторый код для проверки, что именно стало причиной появления того или иного предупреждения. Если при установке модуля РНР функция track_errors была активизирована, то сообщение об ошибке будет сохраняться в глобальной переменной $php_errormsg.
Операция выполнения представляет собой пару операций — пару обратных одинарных кавычек (` `). Их не следует путать с обычными одинарными кавычками — обычно они вводятся с помощью клавиши, на котором расположен символ ~ (тильда).
Все, что заключено в обратные одинарные кавычки, РНР пытается запустить как команду, вводимую в командной строке сервера. Вывод команды будет значением выражения.
Например, в среде UNIX-подобных операционных систем можно использовать следующие строки:
$out = `ls - la`;
echo '<pre>'. $out. '</pre>';
На Windows-сервере этим строкам эквивалентны такие строки:
$out = `dir c:`;
echo '<pre>'. $out. '</pre>';
Любая из версий этого кода получит листинг каталога и сохранит его в переменной $out. Затем его можно вывести в окно веб-браузера либо манипулировать им по своему усмотрению.
В РНР существует несколько операций для работы с массивами. Операции доступа к элементам массива ([ ]) позволяют работать с элементами массивов. Кроме того, в некоторых контекстах массивов можно использовать операцию =>.
Таблица 6. Операции для работы с массивами
Операция | Название | Использование | Результат |
+ | объединение | $a & $b | Возвращается массив, содержащий все, что хранится в переменных $a и $b. |
== | равно | $a | $b | Возвращается true, если $a и $b содержат одни и теже элементы. |
=== | идентично | ~$a | Возвращается true, если $a и $b содержат одни и теже элементы, расположенные в одном и том же порядке. |
!= | не равно | $a ^ $b | Возвращается true, если $a и $b не равны. |
<> | не равно | $a << $b | Возвращается true, если $a и $b не равны. |
!== | не идентично | $a >> $b | Возвращается true, если $a и $b не идентичны. |
Следует отметить, что все перечисленные в таблице операции имеют аналоги для работы со склярными переменными и значениями. До тех пор, пока вы помните, что операция + выполняет сложение склярных типов данных и объединение массивов, поведение операции не должно вызывать вопросов. Сравнивать массивы с данными склярных типов нельзя.
Существует единственная операция определенного типа — instanceof. Хотя эта операция используется в объектно-ориентированном программировании, мы даем ее здесь ради завершенности рассмотрения.
Операция instanceof позволяет проверить, является ли заданный объект экземпляром конкретного класса.