|
льные операции, потому что независимо от типов своих
аргу-
ментов они всегда возвращают одно из двух: false или true. Операции сравнения
позволяют сравнивать два значения между собой и, если условие выполнено,
возвра-
щают true, а если нет — false.
r a == b — истина, если a равно b.
Часть III. Основы языка PHP 138
r a != b — истина, если a не равно b.
r a < b — истина, если a меньше b.
r a > b — аналогично больше.
r a <= b — истина, если a меньше либо равно b.
r a >= b — аналогично больше либо равно.
Следует отметить, что в PHP сравнивать можно только скалярные (то есть строки и
числа) переменные. Для массивов и объектов этого делать нельзя. Их даже нельзя
сравнивать на равенство (при помощи оператора ==), но при выполнении такой опе-
рации PHP не выдает предупреждения. Так что удивившись как-то раз, почему это
два совершенно разных массива при сравнении их с помощью == оказываются вдруг
одинаковыми, вспомните, что перед сравнением оба операнда преобразуются в слово
array, которое потом и сравнивается.
Операции эквивалентности
В PHP версии 4 появился новый оператор сравнения — тройной знак равенства ===,
или оператор проверки на эквивалентность. Как мы уже замечали ранее, PHP
доволь-
но терпимо относится к тому, что строки неявно преобразуются в числа, и
наоборот.
Например, следующий код выведет, что значения переменных равны:
$a=10;
$b="10";
if($a==$b) echo "a e b .aaiu";
И это несмотря на то, что переменная $a представляет собой число, а $b — строку.
Впрочем, данный пример показывает, каким PHP может быть услужливым, когда
нужно. Давайте теперь посмотрим, какой казус может породить эта "услужливость".
$a=0; // ноль
$b=""; // пустая строка
if($a==$b) echo "a и b равны";
Хотя $a и $b явно не равны даже в обычном понимании этого слова, программа зая-
вит, что они совпадают. Почему так происходит? Дело в том, что если один из
опе-
рандов логического оператора может трактоваться как число, то оба операнда
трак-
туются как числа. При этом пустая строка превращается в 0, который затем и
сравнивается с нулем. Неудивительно, что оператор echo срабатывает.
Проблему решает оператор эквивалентности === (тройное равенство). Он не только
сравнивает два выражения, но также их типы. Перепишем наш пример с использова-
нием этого оператора:
$a=0; // ноль
$b=""; // пустая строка
if($a===$b) echo "a e b .aaiu";
Глава 7. Переменные, константы, выражения 139
Вот теперь ничего напечатано не будет. Но возможности оператора эквивалентности
идут далеко за пределы сравнения "обычных" переменных. С его помощью можно
сравнивать также и массивы, объекты и т. д. Это бывает иногда очень удобно. Вот
пример:
$a=array(’a’=>’aaa’);
$b=array(’b’=>’bbb’);
if($a==$b) echo "С использованием == a=b ";
if($a===$b) echo "С использованием === a=b ";
Если запустить представленный код, то выведется первое сообщение, но не второе.
Произойдет это по той причине, что, как мы уже говорили, операнды-массивы
преоб-
разуются в строки array, которые затем и будут сравниваться. Оператор === лишен
этого недостатка, поэтому работает верно.
Разумеется, для оператора === существует и его антипод — оператор !=== (он
состо-
ит из целых четырех символов!). Думаю, что не нужно объяснять, как он работает.
Логические операции
Эти операции предназначены исключительно для работы с логическими выражения-
ми и также возвращают false или true.
r ! a — истина, если a ложно, и наоборот.
r a && b — истина, если истинны и a, и b.
r a || b — истина, если истинны или a, или b, или они оба.
Следует заметить, что вычислени
|
|