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