С оператором равенства == (двойным знаком равенства) мы уже не раз встречались . Ero не следует путать с оператором присваивания = (одинарным знаком равенства). В примере первый оператор присваивает значение, а второй проверяет его на равенство. ?php $month = "Март"; if ($month == "Март") echo "Весна наступила"; ?> Как видно из примера, возвращая значение TRUE или FAL5E, оператор сравнения позволяет проверять условия, используя инструкцию if. Но это еще не все, поскольку PHP является языком со слабой типизацией. Если два операнда выражения равенства имеют разные типы, PHP преобразует их к тому типу, который имеет для него наибольший смысл. К примеру, любые строки, составленные полностью из цифр, при сравнении с числами будут преобразованы в числа. В примере ниже, переменные $a и $b являются двумя разными строками, и поэтому вряд ли стоило ожидать, что какая-то из инструкций if выведет результат. ?php $a = "1000"; $b = "+1000"; if ($a == $b) echo "1"; if ($a === $b) echo "2"; ?>
Но если запустить этот пример, вы увидите, что он выведет число, а это означает, что результат вычисления первой инструкции if является TRUE. Причина в том, что обе строки сначала конвертируются в числа, и 1000 имеет такое же числовое значение, что и +1000. В отличие от первой, во второй инструкции if используется оператор тождественности тройной знак равенства, который удерживает PHP от автоматического преобразования типов. Поэтому переменные $a и $b сравниваются как строки и теперь считаются отличающимися друг от друга, в этом случае на экран ничего не выводится. Как и в случае с принудительным заданием уровня приоритетности операторов, если возникнут сомнения в том, будет ли PHP конвертировать типы операндов, для отмены такого поведения интерпретатора можно воспользоваться оператором тождественности. Аналогично использованию оператора равенства для определения равенства операндов можно проверить их на неравенство, используя оператор неравенства ! =. Пример ниже является измененным , в котором операторы равенства и тождественности были заменены противоположными им операторами. ?php $a = "1000"; $b = (+1000"; if ($a != $b) echo "1"; if ($a !==$b) echo "2"; ?>
Как, наверное, и ожидалось, первая инструкция if не выводит на экран число 1, потому что в коде ставится вопрос о неравенстве числовых значений переменных $a и $b. Вместо этого будет выведено число 2, поскольку вторая инструкция if ставит вопрос о нетождественности прежнего типа операндов переменных $a и $b, и ответом будет TRUE, потому что они не тождественны.
|