Будьте внимательны при проверках $var == 'Y'

В Битрикс проверки на строковую "Y" очень популярны, т.к. сами разработчики ядра используют их повсеместно. Проблема в том, что проверка идет с преобразованием типов. И если "Y" сравнивать с "0", то результат будет true.
var_dump(0 == "Y"); // 0 == 0 -> true
В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Эти правила также распространяются на оператор switch. Преобразование типов не происходит при использовании === или !== так как в этом случае кроме самих значений сравниваются еще и типы.
Пример из "битрикс", проверка свойства типа список, которую мне все используем.
if ($arResult['PROPERTIES']['NEW']['VALUE'] == 'Y') { echo 'Новинка' }
Если поменять тип свойства NEW (например на "Чекбокс, простое число") и его значением будет 0 или 1, то условие будет работать неверно.
Решение простое, для строковых проверок используйте оператор сравнение с типом
var_dump(0 === "Y"); // false if ($arResult['PROPERTIES']['NEW']['VALUE'] === 'Y') { echo 'Новинка' }
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.