«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему свободное сравнение строк с целыми числами в PHP иногда возвращает неожиданные результаты?

Почему свободное сравнение строк с целыми числами в PHP иногда возвращает неожиданные результаты?

Опубликовано 23 декабря 2024 г.
Просматривать:322

Why Does PHP's Loose String-to-Integer Comparison Sometimes Return Unexpected Results?

Сравнение строк с целыми числами: объяснение необычных явлений

В 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