Операции эквивалентности
В PHP версии 4 появился новый оператор сравнения— тройной знак равенства ===, или оператор проверки на эквивалентность. Как мы уже замечали ранее, PHP довольно терпимо относится к тому, что строки неявно преобразуются в числа, и наоборот. Например, следующий код выведет, что значения переменных равны:
$a=10;
$b="10";
if($a==$b) echo "a è b ðàâíû";
И это несмотря на то, что переменная $a представляет собой число, а $b — строку. Впрочем, данный пример показывает, каким PHP может быть услужливым, когда нужно. Давайте теперь посмотрим, какой казус может породить эта "услужливость".
$a=0; // íîëü
$b=""; // ïóñòàÿ ñòðîêà
if($a==$b) echo "a è b ðàâíû";
Хотя $a и $b явно не равны даже в обычном понимании этого слова, программа заявит, что они совпадают. Почему так происходит? Дело в том, что если один из операндов логического оператора может трактоваться как число, то оба операнда трактуются как числа. При этом пустая строка превращается в 0, который затем и сравнивается с нулем. Неудивительно, что оператор echo срабатывает.
Проблему решает оператор эквивалентности === (тройное равенство). Он не только сравнивает два выражения, но также их типы. Перепишем наш пример с использованием этого оператора:
$a=0; // íîëü
$b=""; // ïóñòàÿ ñòðîêà
if($a===$b) echo "a è b ðàâíû";
Вот теперь ничего напечатано не будет. Но возможности оператора эквивалентности идут далеко за пределы сравнения "обычных" переменных. С его помощью можно сравнивать также и массивы, объекты и т. д. Это бывает иногда очень удобно. Вот пример:
$a=array(’a’=>’aaa’);
$b=array(’b’=>’bbb’);
if($a==$b) echo "Ñ èñïîëüçîâàíèåì == a=b<br>";
if($a===$b) echo "Ñ èñïîëüçîâàíèåì === a=b<br>";
Если запустить представленный код, то выведется первое сообщение, но не второе. Произойдет это по той причине, что, как мы уже говорили, операнды-массивы преобразуются в строки array, которые затем и будут сравниваться. Оператор === лишен этого недостатка, поэтому работает верно.
Разумеется, для оператора === существует и его антипод — оператор !=== (он состоит из целых четырех символов!). Думаю, что не нужно объяснять, как он работает.