pentarh
@pentarh

PHP странное поведение оператора ==

Просто интересно, почему код

<?php echo 0 == 'sell'?'true':'false';

Отдает значение true?

PHP 5.4.12, 5.3.19
  • Вопрос задан
  • 2713 просмотров
Пригласить эксперта
Ответы на вопрос 5
BuriK666
@BuriK666
Компьютерный псих
потому что, второй аргумент в операторе == приводится к типу первогого аргумента, следовательно (int)'sell' === 0 отсюда 0 == 0 дает true.
Ответ написан
Maksimus2000
@Maksimus2000
Программист
Правый операнд преобразуется в number, подробнее здесь
php.net/manual/ru/language.operators.comparison.php
Ответ написан
Комментировать
hell0w0rd
@hell0w0rd
Просто разработчик
Не баг же. Используйте === когда важна точность сравнения
Ответ написан
Комментировать
@for93t
А еще, например, нельзя проверять вхождение подстроки в строку, используя выражения типа:

if (!strpos($haystack, $needle) {

потому что строка может начинаться с искомой подстроки и функция вернет 0, который без явного сравнения типов (оператор ===) не даст сработать условию правильно.

Вообще лояльность PHP к типам переменных может быть причиной довольно коварных багов. Так что нужно иметь хотя бы базовое представление о сравнении переменных разных типов чтобы не наступать на эти грабли.
Ответ написан
@for93t
не в ту ветку, извиняюсь
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы