Intereting Posts
Как определить, доступен ли mod_rewrite? Ошибка Google Recaptcha, вход в систему без завершения головоломки, но показывает тик Нечетные разрешения для файла, измененного PHP move_uploaded_file () Codeigniter – использование нескольких баз данных агрегирование mongodb php Скорость доступа к файлам и скорость доступа к базе данных Как использовать строку PHP в запросе mySQL LIKE? Использовать проверку подлинности Windows в качестве учетных данных для интрасети Интерактивная оболочка с использованием PHP Что означает «запись не удалась: нет места на устройстве» означает? Присвоение нескольких переменных одному элементу PHP Быстрее, лучше и более эффективный тип намека на PHP Storm с локаторами сервисов Плохое значение для действия атрибута в форме элемента: должно быть непустым Необходимо получить все <img> из the_content (); в WordPress? Лоравельский красноречивый запрос разбиения на несколько этапов

Сравнение разных строк в PHP с == возвращает true

Я просто отлаживал скрипт и обнаружил, что if-statement работает не так, как я ожидал.

var_dump("6064365413078728979" == "6064365413078728452"); die(); 

Приведенный выше код приведет к следующему:

 bool(true) 

С помощью оператора === он работает так, как ожидалось. У кого-нибудь есть идеи, почему?

Я использую PHP версии 5.3.13 с установкой wamp на компьютере с процессором x64.

     <?php $a=6064365413078728979; $b=6064365413078728452; echo $a."<br>".$b; //var_dump( $a==$b ); die(); ?> 

    Когда вы запустите это, то на вашем компьютере, который может превышать лимит для числа, и это числовое сравнение. Попробуйте сценарий выше и увидеть значение для $ a, вероятно, будет отличаться от значения, которое вы дали.

    Вот почему, когда оба сравниваются численно, они равны. Следовательно, используйте === как предложено другими

    Изменить: пояснение, основанное на совете @ Axel.

    Руководство PHP объясняет

    Размер поплавка зависит от платформы, хотя максимум ~ 1.8e308 с точностью до 14 десятичных цифр является общим значением (64-битный формат IEEE).

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

    PHP имеет свободное поведение сравнения типов, поэтому ваши числовые строки преобразуются в целые типы до == не строгого сравнения, а результат преобразования переполняется.

    Это основная причина использования === когда это возможно.

    Взгляните на эту страницу для получения дополнительной информации о жонглировании типа.