Я просто отлаживал скрипт и обнаружил, что 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 имеет свободное поведение сравнения типов, поэтому ваши числовые строки преобразуются в целые типы до ==
не строгого сравнения, а результат преобразования переполняется.
Это основная причина использования ===
когда это возможно.
Взгляните на эту страницу для получения дополнительной информации о жонглировании типа.