Сравнение строк с целыми числами: объяснение необычных явлений
В PHP сравнение строк с целыми числами может иногда давать необычные результаты. Эта путаница возникает из-за небрежного поведения PHP при сравнении, особенно при сравнении строк со значением 0.
Рассмотрим следующий код:
$test1 = "d85d1d81b25614a3504a3d5601a9cb2e"; $test2 = "3581169b064f71be1630b321d3ca318f"; if ($test1 == 0) echo "Test 1 is Equal!?"; if ($test2 == 0) echo "Test 2 is Equal!?";
Удивительно, но вывод этого кода следующий:
Test 1 is Equal!?
Почему это происходит ?
Согласно документации PHP по преобразованию строк в числа, когда строка оценивается в числовом контексте (например, сравнение), оно преобразуется в число с плавающей запятой или целое число в зависимости от его содержимого. Если строка содержит такие символы, как «.», «e» или «E», она рассматривается как число с плавающей запятой. В противном случае оно считается целым числом.
В случае $test1 строка не содержит числовых символов и, следовательно, преобразуется в целочисленное значение 0. Вот почему сравнение $test1 == 0 оценивает значение true.
Почему $test2 не работает?
$test2 также начинается с нечисловых символов, так почему разве оно также не равно 0? Это связано с тем, что строка содержит символ «3» в начале. Согласно документации PHP, допустимое число начинается со знака (необязательно), за которым следуют цифры. Таким образом, $test2 преобразуется в число с плавающей запятой со значением 0, а сравнение $test2 == 0 дает значение false.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3