#php
доброго времени суток. объясните, пожалуйста, почему var_dump("любая строка" == 0); возвращает bool(true) при этом если 0 привести к строковому или булеву типу, либо использовать жёсткое сравнение, то условие отрабатывает нормально(false). как так получается что 0 равен любой строке? php 5.6.30
Ответы
Ответ 1
Документация В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Преобразование в число Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль). Соответственно при сравнении "строка" == 0, строка преобразуется в число 0Ответ 2
Потому что "любая строка" приводится к int. А int от неё - 0. Но 0 равен не любой строке. Попробуйте "123любая строка" Жесткое сравнение сначала сравнивает типы.Ответ 3
ты используешь == который сортирует типы данных за тебя. 0 целочисленная переменная, в вашей проблеме строка прикастится к 'e' в целочисленную переменную. которая не парсится, и будет равно 0. строка '0e' тоже будет 0, и будет совпадать! НО! строка '1e'не равна 0 а равна 1 вместо этого используй === на примере https://ideone.com/3sZY7N var_dump("любая строка" == 0); //true var_dump("любая строка" === 0); //false
Комментариев нет:
Отправить комментарий