Для меня это очередные грабли, но на блоге до этого их не постил.
<?php
echo (int)‘1e+3′.“\n”;
echo (int)1e+3.“\n”;
if(‘1e+3′==1e+3){
echo “==\n”;
}else{
echo “!=\n”;
}
?>
################################
snook@ubuntu:~ $ php test.php
1
1000
==
Началось с того что я получал данные из MySQL FLOAT поля в переменную, и перед выводом делал (int)$var и в результате получал разные данные в зависимости от того была ли степень. Например 1000 или 1e+3 - это одинаковые значения, но (int)$var давал разные результаты.
Запостил я эти грабли на irc:irc.by#php и сразу получил в лоб с вывражениями типа “ты херню делаешь” или “ты не то ожидаешь” и доказательствами что это правильно. Смысл в том что ПэХаПэ сам считает что ‘1e+3′==1e+3. Равны именно значения (про грабли === я конечно же знаю). Так раз они равны, тогда почему конструкция (int)‘1e+3′ и (int)1e+3, по сути функция с равными аргументами, дает разные результаты.
Один товарищ упортно в IRC доказывал что это правильно, но результатирующее сообщение сказало само за себя.
Я: я уверен что даже если запостить этот баг разработчикам они над этим поработают и не будут спорить над тем что это так должно быть.
Я: причем я думаю что и ты считаешь что это грабли, просто пытаешься поддержать свою первоначальную точку зрения
ОН: это не баг
ОН: я считаю, что весь PHP немного граблевый
ОН: но в контексте того, какой он есть — это не грабли, и не баг. это нормально
Я: ну я про это и говорю :) чё ж ты сопротивляешься тогда… грабли среди граблей когда постоянно с граблями работаешь это нормально, уже понимаешь как с этими граблями работать надо.
P.S. Товариши, пожалейте себя, не тратьте время на изучение граблей, изучайте нормальные языки.