Оператор эквивалентности PHP
Достаточно часто появляется такая проблема в PHP, решением которой является использование оператора эквивалентности. Дело в том, что PHP любит преобразовывать типы, и, с одной стороны, это хорошо. Например, при сложении числа и строки, строка преобразуется в число и складывается. В результате, всё хорошо. Но бывают случаи, когда такое преобразование плачевно. Пример? Читайте далее.
Допустим, у Вас есть две переменные:
<?php
$var_1 = 0;
$var_2 = "";
if ($var_1 == $var_2) echo "Переменные равны";
?>
Как Вы и догадались, PHP нам выведет, что переменные равны. Но разве 0 равен пустой строке? Разумеется, нет. А почему так произошло? Всё достаточно просто: 0 для PHP - это false (другие числа - это true), а пустая строка - это тоже false (если она не пустая, то PHP считает её true). В итоге, у нас оба операнда стали false, и, очевидно, что они равны. То есть в данном примере мы явно видим, что преобразование сработало неверно. И поверьте моему опыту, данных засадных мест встречается очень много.
Теперь встаёт вопрос: "Как бороться с этим?". Как Вы догадались из названия статьи, с помощью оператора эквивалентности PHP, который обозначается так "===". Данный оператор сверяет не только значения (как делает оператор сравнения, используемый нами выше), но и типы. То есть чтобы проверка эквивалентности выдала true необходимо совпадение не только значений, но и типов. Давайте проверим это:
<?php
$var_1 = 0;
$var_2 = "";
if ($var_1 === $var_2) echo "Переменные равны";
else echo "Переменные не равны";
?>
Результатом выполнения скрипта будет вывод строки: "Переменные не равны", чего мы с Вами и добивались. То есть значения переменных равны, но их типы не совпадают (одна переменная integer, а другая string), поэтому оператор эквивалентности вернул false и отправил нас в блок else, где мы и вывели соответствующую строку.
Разумеется, у Вас впереди будет ещё много ошибок, связанных с преобразованием типов, так как подобных нюансов действительно очень много, но со временем Вы научитесь использовать оператор эквивалентности, и ошибок определённо станет меньше.
-
- Михаил Русаков
Комментарии (6):
<?PHP $a = 0; $b = "hhh"; if ($a == $b) echo "!"; else echo "?"; ?> в браузере говорит "!", а ведь должен говорить "?" - почему так, подскажите, плиз
Ответить
Проверил, выводит !.
Ответить
да,но значение строки "hhh" - true, а 0 - false? значит, в данном случае должно быть "?" на выходе? или я что-то не правильно поняла?:(
Ответить
Вы проверяете на равенство, очевидно, что true не равно false, поэтому и выводится !.
Ответить
но если true не равно false, условие не выполняется и по этому должно выводить else тоесть "?"
Ответить
Прочитав про false и true, я тоже немного растерялся и не мог понять, почему же , если "hhh" возвращает TRUE, а 0 возвращает FALSE , почему же они равны. А дело, как оказалось, в том, что если один из операндов логического оператора может трактоваться как число, то оба операнда трактуются как числа. При этом пустая строка превращается в 0, который затем и сравнивается с нулем. Ссылка - http://www.php.su/learnphp/operators/?equiv Попробуйте, как сделал я : $a приравняйте к какому-то другому числу, 5, например. И увидите, что возвратится ваш "?", т.к. "hhh" преобразуется в число 0, а 0 и 5 не равны. Надеюсь, помог.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.