var_dump("5.0" == "5");

zerkms

TDD infected
Команда форума
var_dump("5.0" == "5");

господа, почему var_dump("5.0" == "5");
true?

на каких основаниях пхп здесь производит неявное приведение типов?

-~{}~ 15.11.09 14:50:

ёпт, это тоже описано в документации
"If you compare two numerical strings, they are compared as integers."
просто волшебный термин, числовые строки.....
пхп такой пхп
 

nerezus

Вселенский отказник
> If you compare two numerical strings, they are compared as integers

Неужели?)
<? var_dump("5.2" == "5.3"); ?>
Не равны. А при приведении к integer были бы равны.
 

zerkms

TDD infected
Команда форума
пхп настолько суров, что все числа в нём - целые.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
zerkms
даже великому гуру ООП прийдется спуститься до чтения мануала по приведению типов
 

zerkms

TDD infected
Команда форума
grigori
к чему тут сарказм?
поведение неочевидное, в документации ошибка.
конечно, куда ещё податься, кроме как в мануалы.
 

Beavis

Banned
Интересно глянуть кусок исходника пхп который за это всё отвечает
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Основания очевидны, вроде: при == происходит кастинг типов, при === нет.
 

nerezus

Вселенский отказник
флоппик
Ты не замечаешь ошибки разве?

If you compare two numerical strings, they are compared as integers
var_dump("5.0" == "5"); <= may be
var_dump("5.2" == "5.3"); <= wtf? :confused:
var_dump("A numeric string" == "Another string with 3.14zdec"); <= O_O

И кстати. Любая строка - это numeric строка.
 

Beavis

Banned
под numerical string наверное имелись ввиду строки удовлетворящие [m]is_numeric[/m]
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
да, не сообразил
я как-то давно это знаю, привык что-ли...

-~{}~ 15.11.09 16:22:

не как Integers, а "приводятся к числам"
 

nerezus

Вселенский отказник
grigori
var_dump("5.2" == "5.3"); вот тут должно было бы 5 сравнить с 5 судя по докам.
 

zerkms

TDD infected
Команда форума
ну так или иначе - причины такой реализации всё таки есть: все данные, приходящие из внешних источников, приходят в строках.
т.е. опять виновата слабая типизированность.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
я рассматриваю "числовые строки" по сути как отдельный вид данных:
это _числа_ без ограничения разрядности, для работы с которыми нужны специальные операторы и функции
к сожалению, это не документировано, можно написать статью

я везде использую проверку is_numeric()
даже проводил тесты: функция очень быстрая, вообще незаметна на производительности даже на строках в мегабайты
 

zerkms

TDD infected
Команда форума
nerezus
что не совсем? если бы не было этого изврата, тогда все данные, приходящие снаружи, приходилось бы явно кастить. а это геморно.

grigori
везде? зачем? приведи пример, где это жизненно необходимо.

-~{}~ 16.11.09 00:32:

вообще незаметна на производительности даже на строках в мегабайты
потому что она вердикт выносит по первым символам, хыхы :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
думаю, определение "жизненно необходимо" надо убрать как исключающее все аргументы, в т.ч. программирование как таковое :)
давай говорить точными понятиями

-~{}~ 15.11.09 16:34:

>потому что она вердикт выносит по первым символам, хыхы
ты че, троллишь?
 
Сверху