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

48
Алексей,
Будьте внимательны при проверках $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 'Новинка'
}
Опубликовано 25 Февраля 2020
разработчику, баг

Возврат к списку

Похожие статьи
Рекурсивный поиск подстроки в php файлах через консоль 0
В битриксе много файлов, очень много файлов, иногда можно потратить десятки минут на поиск нужного к...
Читать дальше »
Алексей,
Как защитить оригинальные изображения, если у Вас битрикс 0
Даже если нет прямой ссылки и налету добавляется водяной знак часто можно скачать оригинал изображен...
Читать дальше »
Алексей,
Комментарии