kurkuma 08.03.2012 13:15 Workstation

Всё, впизду PHP, доебал меня совсем:

$id1 = '9223372036854775888';
$id2 = '9223372036854775899';
var_dump($id1 == $id2);

Результат — true, охуеть просто.

1. 238328 08.03.2012 13:19 6907850681331210921493776

будто что-то плохое

2. 238328 08.03.2012 13:19 6907850681331210921493776

===

3. 238328238328 /2 08.03.2012 13:19 6907850681331210921493776

!==

4. 238328238328 /3 08.03.2012 13:19 6907850681331210921493776

$$$$$vriable

5. kurkuma238328 /2 08.03.2012 13:27 Workstation

если разные типы переменных — всегда будет возвращать false

6. kurkuma 08.03.2012 13:28 Workstation

то есть смысл динамической типизации теряется. вот нахуя, спрашивается, потребовалось приводить числовые строки как целые при == сравнении?

7. kurkumakurkuma /6 08.03.2012 13:43 Workstation

при том, что даже принудительное указание типа не помогает:
var_dump((string) $id1 == (string) $id2);
все равно будет TRUE

8. kurkuma 08.03.2012 13:44 Workstation

в пёрле и пистоне такой хуйни нет. очень неочевидное поведение

9. 238328kurkuma /8 08.03.2012 14:04 6907850681331210921493776

в питоне вообще до какой-то последней версии сравнивались строки с названиями типов, то есть, например, любая строка('string') была всегда больше любого целочисленного('int')

10. 238328kurkuma /5 08.03.2012 14:43 6907850681331210921493776

приводи типы сам

11. 238328kurkuma /7 08.03.2012 14:44 6907850681331210921493776

лол

12. 238328kurkuma /8 08.03.2012 14:44 6907850681331210921493776

читай доки, всё ОЧЕВИДНО

13. kurkuma238328 /9 08.03.2012 15:19 mind

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

14. kurkuma238328 /10 08.03.2012 15:23 mind

в том-то и прикол, что например нельзя принудительно заставлять php сравнивать строковые числа как строки, а не приводить их к integer:
var_dump((string) $id1 == (string) $id2); тот же самый результат даст, а при тестировании ОЧЕНЬ редко попадаются числа близкие к MAX_INT чтобы вообще не то, чтобы заметить косяк, а вообще узнать о существовании такой фичи. теперь-то конечно, буду по === сравнивать, приводя к одинаковому типу, но как говорится, осадок-то остался: сколько кода с такой потенциальной уязвимостью уже написано — охуеть просто

15. kurkuma238328 /12 08.03.2012 15:24 mind

то, что php при сравнении строковых чисел будет конвертировать их в integer — это НИХУЯ НЕ ОЧЕВИДНОЕ ПОВЕДЕНИЕ

16. 238328kurkuma /14 08.03.2012 18:05

поэтому нормальные люди и не берутся за пышечку

17. 238328kurkuma /15 08.03.2012 18:06 1425145538133122954049241

>сравнении
в том и суть, что нет просто СРАВНЕНИЯ, читай доки по этим базовым операторам

Do you really want to delete ?