kurkuma
08.03.2012 13:15 Workstation
Всё, впизду PHP, доебал меня совсем:
$id1 = '9223372036854775888';
$id2 = '9223372036854775899';
var_dump($id1 == $id2);
Результат — true, охуеть просто.

17 comments
recommend
bookmark
subscribe
будто что-то плохое
===
!==
$$$$$vriable
если разные типы переменных — всегда будет возвращать false
то есть смысл динамической типизации теряется. вот нахуя, спрашивается, потребовалось приводить числовые строки как целые при == сравнении?
при том, что даже принудительное указание типа не помогает:
var_dump((string) $id1 == (string) $id2);
все равно будет TRUE
в пёрле и пистоне такой хуйни нет. очень неочевидное поведение
в питоне вообще до какой-то последней версии сравнивались строки с названиями типов, то есть, например, любая строка('string') была всегда больше любого целочисленного('int')
приводи типы сам
лол
читай доки, всё ОЧЕВИДНО
внатуре, есть такая хуйня. но это хотя бы сразу вылезет, а в случае PHP многие годами на нем пишут и тупо не подозревают о такой "баге"
в том-то и прикол, что например нельзя принудительно заставлять php сравнивать строковые числа как строки, а не приводить их к integer:
var_dump((string) $id1 == (string) $id2); тот же самый результат даст, а при тестировании ОЧЕНЬ редко попадаются числа близкие к MAX_INT чтобы вообще не то, чтобы заметить косяк, а вообще узнать о существовании такой фичи. теперь-то конечно, буду по === сравнивать, приводя к одинаковому типу, но как говорится, осадок-то остался: сколько кода с такой потенциальной уязвимостью уже написано — охуеть просто
то, что php при сравнении строковых чисел будет конвертировать их в integer — это НИХУЯ НЕ ОЧЕВИДНОЕ ПОВЕДЕНИЕ
поэтому нормальные люди и не берутся за пышечку
>сравнении
в том и суть, что нет просто СРАВНЕНИЯ, читай доки по этим базовым операторам