PHP и строки близкие в maxint?

Приглашаются знатоки «на подумать»)

Обнаружил странное поведение такого кода.
$id1 = '9223372036854775888';<br/>
$id2 = '9223372036854775899';<br/>
var_dump($id1 == $id2);<br/>



Результат — true. В мане сказано, что числовые строки сравниваются как целые. Чем нужно руководствоваться чтобы такое придумать? Т.е. когда заранее неизвестен вид сравниваемых строк, то можно получить что угодно на выходе.
  • Вопрос задан
  • 2839 просмотров
Пригласить эксперта
Ответы на вопрос 4
7workers
@7workers
Сделайте маленький пост в ленту, это должен знать каждый. «Баг» висит с 2007 года так что вряд ли что-то изменится: bugs.php.net/bug.php?id=43304
Ответ написан
pompeev
@pompeev
Опасная штука, у меня тоже тру ==, === фолс.

при указании типа (string) даже тру
Ответ написан
Чем нужно руководствоваться чтобы такое придумать?

Тем что PHP изначально шаблонизатор, работает с текстовыми данными (вход скрипта с веб-сервера, записи в БД, файлы — всё строки), но данные зачастую числовые по сути. Вот и «облегчили» жизнь разработчикам, чтоб не нужно было на каждый чих типы приводить.

Помню случайно наткнулся на эту сомнительную «фичу», сравнивал примерно так: $str1. 'fake' == $str2. 'fake'
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы