Очень странное поведение PHP при "Гибком сравнении" значений с помощью ==(двух равно)

#Пример: $var= 0; if($var=='test2')echo 'yes'; else echo 'no'; #result yes

где не имеет значение содержимое переменной $var тип строка "test2" | "test3" | "" используемое в операторе сравнения IF.

Будучи уже далеко не новичком в PHP, иногда казалось бы досконально изученный язык программирования PHP не перестает удивлять меня в простых вещах, таких как например сравнение значений.

Столкнулся с такой простой на первый взгляд проблемой в очень большом проекте, где продебажить ее было непросто. Найдя и исправив ошибку, используя === (три равно) "Жесткое сравнение", я решил вернуться в первый класс и детально разобраться с багом или проблемой, почему результат оказался, кстати, не только для меня:) непредсказуем.

Таблица  сравнения типов в PHP идем на официальный сайт PHP в таблицу "Гибкое сравнение с помощью == (двух равно)"

где черным на сером все это задокументировано.

И вот оказывается, что ничего странного и непредсказуемого нет, просто надо не лениться перечитывать мануал, т.к. на момент первичного изучения некоторые вещи могли быть непонятными, незамеченными и потому забытыми.

Описываемая мной ситуация не баг в PHP, а документированный момент - при гибком сравнении значения int 0 со string полной или пустой результат TRUE, т.е. условие всегда будет выполняться.

P.S.
Идеальный вариант - не мешать переменные, предназначенные для хранения разных типов, так как удобства при инициализации переменных без указания их типов, которые дает PHP, расслабляют. Также при инициализации переменных назначать им префикс, указывающий на предполагаемый тип содержимого, например, так:

$o_city= new City; $a_cars= array(); $s_site= 'www.bondar.rv.ua'; $i_res = 777;

• Комментарии

нет комментариев

• Добавить комментарий

Код с изображения*