Другие языки программирования и технологии
почему в PHP выражение (0 == 'текст') дает истину?
Столкнулся со странной вещью в PHP if (0 == 'текст') // Это условие всегда срабатывает Можно ноль присвоить в переменную, будет тоже самое $a=0; if($a=='текст') // Тоже истина А вот если вместо нуля любая другая цифра, то условие уже работает как положено if (12 == 'текст') // Это уже не сработает, это правильно. Конечно сравнение с нулем можно делать с помощью проверки типа(===) if (0 === 'текст') // вот с помощью такого сравнения все работает... Но мне интересна сама логика, почему такое происходит? Я бы понял, если бы нельзя было сравнивать число с текстом, но в php в такой ситуации происходит автоматическое преобразование числа в текст и мой пример должен автоматически преобразоваться в if ('0' == 'текст') то есть ноль должен преобразоваться в строку и сравниться с другой строкой.
в том что стоит взять и почитать учебник по PHP!
== оператор сравнения чисел!
=== оператор сравнения строк! (точнее он сравнивает совпадение типов и значений.. . )
если в условии использовать == то обе переменные будут преобразовываться в число! и если в тексте нет числа то текст преобразовывается в ноль!
вот вы и сравниваете:
if (0 == 'текст') и тут 'текст' преобразовывается в ноль! вот и выходит TRUE!
== оператор сравнения чисел!
=== оператор сравнения строк! (точнее он сравнивает совпадение типов и значений.. . )
если в условии использовать == то обе переменные будут преобразовываться в число! и если в тексте нет числа то текст преобразовывается в ноль!
вот вы и сравниваете:
if (0 == 'текст') и тут 'текст' преобразовывается в ноль! вот и выходит TRUE!
Ну что вы ждали от `языка' в котором можно сравнивать строку с числом, лол? Берём нестрогую типизацию, один оператор сравнения для строк и чисел (а не отдельный оператор сравнения для строк, как в перле например) , вследствии этого автоматическое приведение типов в сравнении и получаем, что при $a==$b и $b==$c не всегда будет $a==$c, лол. Enjoy your недоязык.
Чуть не забыл тут http://php.net/manual/ru/types.comparisons.php таки можно понять как это работает.
Чуть не забыл тут http://php.net/manual/ru/types.comparisons.php таки можно понять как это работает.
В пхп делал только один курсовик, так что тут только мои догадки.
Я думаю что из-за отсутствия строгой типизации ПХП пытается преобразовать второй аргумент к типу первого. Но как преобразовать текст "текст" в строку не выдавая ошибки? только если возвратить ноль.
Для проверки попробуйте условие
if (12 == '12')
Я думаю что из-за отсутствия строгой типизации ПХП пытается преобразовать второй аргумент к типу первого. Но как преобразовать текст "текст" в строку не выдавая ошибки? только если возвратить ноль.
Для проверки попробуйте условие
if (12 == '12')
"== оператор сравнения чисел! " - где это Вы взяли?
По этой логике 'текст1' == 'текст2' тоже true, т. к. при приведении к числу оба будут равны нулю. Но это же не так. Думаю, Ваш ответ неверен.
По этой логике 'текст1' == 'текст2' тоже true, т. к. при приведении к числу оба будут равны нулю. Но это же не так. Думаю, Ваш ответ неверен.
Похожие вопросы
- Почему программа Php Devel Studio,содержит вирус?
- почему говорят php это не перспективно, а java - перспектива?
- Почему на компьютере при выводе текстов не используют вместо букв иконки (вместо каждой буквы - одна иконка) ? Ведь хорош
- C++, почему не выводится на экран текст: Введенное Вами число - простое.
- Выражения в php
- Как сделать правильное отображения русского текста, какую кодировку поставить. (MySQL, PHP)
- Как вывести текст на страницу через php??
- Помогите вычислить логическое значение выражения. А=0, В=0, С=0
- HTML отображается, а PHP нет, почему? я только начинаю работать с PHP. Прошу сильно не пинать!
- С какого языка начинать изучения программирования Pascal/PHP/Python?