Другие языки программирования и технологии

почему в PHP выражение (0 == 'текст') дает истину?

Столкнулся со странной вещью в PHP if (0 == 'текст') // Это условие всегда срабатывает Можно ноль присвоить в переменную, будет тоже самое $a=0; if($a=='текст') // Тоже истина А вот если вместо нуля любая другая цифра, то условие уже работает как положено if (12 == 'текст') // Это уже не сработает, это правильно. Конечно сравнение с нулем можно делать с помощью проверки типа(===) if (0 === 'текст') // вот с помощью такого сравнения все работает... Но мне интересна сама логика, почему такое происходит? Я бы понял, если бы нельзя было сравнивать число с текстом, но в php в такой ситуации происходит автоматическое преобразование числа в текст и мой пример должен автоматически преобразоваться в if ('0' == 'текст') то есть ноль должен преобразоваться в строку и сравниться с другой строкой.
в том что стоит взять и почитать учебник по PHP!
== оператор сравнения чисел!
=== оператор сравнения строк! (точнее он сравнивает совпадение типов и значений.. . )
если в условии использовать == то обе переменные будут преобразовываться в число! и если в тексте нет числа то текст преобразовывается в ноль!
вот вы и сравниваете:
if (0 == 'текст') и тут 'текст' преобразовывается в ноль! вот и выходит TRUE!
Байыш Маманов
Байыш Маманов
41 003
Лучший ответ
Ну что вы ждали от `языка' в котором можно сравнивать строку с числом, лол? Берём нестрогую типизацию, один оператор сравнения для строк и чисел (а не отдельный оператор сравнения для строк, как в перле например) , вследствии этого автоматическое приведение типов в сравнении и получаем, что при $a==$b и $b==$c не всегда будет $a==$c, лол. Enjoy your недоязык.

Чуть не забыл тут http://php.net/manual/ru/types.comparisons.php таки можно понять как это работает.
Sanjay Kohli
Sanjay Kohli
33 164
В пхп делал только один курсовик, так что тут только мои догадки.

Я думаю что из-за отсутствия строгой типизации ПХП пытается преобразовать второй аргумент к типу первого. Но как преобразовать текст "текст" в строку не выдавая ошибки? только если возвратить ноль.

Для проверки попробуйте условие
if (12 == '12')
Петр Марфин
Петр Марфин
22 045
"== оператор сравнения чисел! " - где это Вы взяли?
По этой логике 'текст1' == 'текст2' тоже true, т. к. при приведении к числу оба будут равны нулю. Но это же не так. Думаю, Ваш ответ неверен.