ОПЕРАТОР ЕКВІВАЛЕНТНОСТІ (===)
Іноді звичайний оператор порівняння == працює не зовсім коректно, точніше не так, як нам хочеться, в деяких ситуаціях навіть виходять міні-анекдоти. Розглянемо наступний приклад:
<?
$х = 0; // число, рівне 0
$s = ""; //пустий рядок
echo gettype($x)."\n";
echo gettype($s)."\n";if ($x==$s) echo "x =s";?>
Змінні $х і $s не можуть бути рівні навіть з логічної точки зору, програма спочатку виводить повідомлення про те, що змінна $х є цілим числом (integer), а змінна $s — рядком (string). A після цього програма повідомляє, що змінні рівні. Вся справа тому, що PHP трактує одну із змінних (яку саме — не знаю, оскільки і 0, і " " — це false, цілком може бути, що інтерпретатор вважає логічним обидві змінні), як логічну змінну, а якщо хоч би одна змінна логічна, то друга теж вважається логічною. Тому ми отримуємо false==false, отже, програма виведе рядок "x=s".
Щоб уникнути подібної ситуації, потрібно використовувати оператора еквівалентності = = =. Якщо модифікувати нашу програму так:
<?
$х = 0;
// число, рівне 0
$s = "";
//пустая рядок
echo gettype($x)."\n";
echo gettype($s)."\n";
if ($x===$s) echo "x =s";
?>
то зараз рядок "x=s" виведена не буде. Проведемо ще один експеримент; з використанням масивів. Розумію, що про масиви в PHP ви ще нічого не знаєте, але зараз просто необхідно забігти небагато наперед.
<?
$A = array('l'=>'0001');
// використовуються апострофи, а не лапки
$В = array('2'=>'0010');
if ($А == $B) echo "A= -В".;
if ($А === $B) echo "A= = =B";
?>
Буде виведений перший рядок, але не друга. У версіях PHP 4.0.x і нижче масиви $А і $в перетворювалися в рядки "array", які і порівнювалися. Ось через це оператор == неправильно працював. Оператор === із самого початку позбавлений цього недоліку. Зараз у мене встановлена версія 4.1.2 (не найновіша), але в ній оператор == працює коректно.
Для оператора === повинен бути зворотний оператор !===, але його немає. Якщо ви напишете:
if ($А !=== $B) echo "A<>B";
ви отримаєте повідомлення про помилку. Але можна обійти цю незручність так:
if (!($А === $B)) echo "A<>B";