То ли воздух нынче пьян, то ли леший нынче рьян...

Ragazzo

TDD interested
Фанат
:confused: что значит "какстроки"? в php строка только с цифрами при операциях сравнения/сложения будет действовать как число, в чем подвох?
боюсь что пример
PHP:
var_dump("2"+"22");
повергнет тебя в ужас :D
ты бы хоть по ссылкам прошел которые я еще вначале привел? :S
 

Ragazzo

TDD interested
Absinthe
я выше написал как бы, про строки состоящие только из цифр и не только из цифр. Меня немного удивило что для кого-то это может быть открытием ;)
 

Ragazzo

TDD interested
Фанат
что тут не так? в строке есть нецифры, все ок. для 16ричной это не действует, в мане все примеры описаны. У тебя опять "глюк" какой-то, как с объектами ;)
Translate strings and resources to numbers, usual math
 

Фанат

oncle terrible
Команда форума
Короче, с мануалом разобрались. Но найти бы объяснение бы...
На стаковерфлфое пока не нарыл
 

Absinthe

жожо
Кстати, возникло некоторое недоумение.
В is_numeric упомянута octal форма("0777"), но intval для нее вернет 777. Как-то непорядочно получается.

Меня немного удивило что для кого-то это может быть открытием ;)
Что строки при сравнении кастятся до чисел? Да черножопые коровопоклонники и то лучше бы написали!
 

Фанат

oncle terrible
Команда форума
хм... ладно, видимо у меня нет дара объяснения :D
Что происходит - объяснил флоп ссылкой ещё на той странице. что строки, состоящие из цифр, мы сравниваем как числа. Ок.

Теперь я хочу понять почему мы так делаем. Зачем. Почему мы просто не сравниваем две строки, а зачем-то сначала проверяем их на вшивость (нумериковастость), если проверка проходит - кастим, а потом только сравниваем. А если проверка не проходит - то фиг с ним, тогда уж сравниваем, как строки.

Если ты считаешь ключевой фразой "usual math" - не затруднит тебя ее как-то развернуто пояснить?
 

Ragazzo

TDD interested
Absinthe
Да черножопые коровопоклонники и то лучше бы написали!
ну тут есть мейнтейнеры, можешь им сказать это :)
В is_numeric упомянута octal форма("0777"), но intval для нее вернет 777. Как-то непорядочно получается.
и цифры после обрезает
 

Ragazzo

TDD interested
Фанат
объяснил флоп ссылкой ещё на той странице
я привел объяснение на "той" странице, с указанием на пункт 3. Как тебе объяснить что php поддерживает базовые "math" операции в виде "степени" (1e1) при сравнении, и не поддерживает системы счисления? В мане все написано подробно, ну или ищи дальше на стековерфлоу или еще где-то ;) всем понятно, тебе - нет ;)
 

Absinthe

жожо
ну тут есть мейнтейнеры, можешь им сказать это
Я думаю, что не ментейнеры в этом виноваты.
Да и не создателю PHP это говорить: он то наверняка ума набрался с момента создания PHP, и текущее дерьмо нужно только для BC.

Придется смириться.
 

Фанат

oncle terrible
Команда форума
Если здесь есть кто-нибудь, кто понимает значение загадочных слов "usual math" в качестве объяснения - почему при сравнении двух строк мы их кастим в числа, и кому не в падлу это объяснить - я был бы очень благодарен.
 

WMix

герр M:)ller
Партнер клуба
поведение совершенно нормальное, нет ничего особого в том что цифры интерпретируются по умолчанию как int. и причина тоже понятна, в протоколах обычно strings и для удобства числа сразу переводятся в числа. язык же не строго типизированный за что его и люблю.
кто понимает значение загадочных слов "usual math"
если поможет, в русском мануале написано так
Строки и ресурсы переводятся в числа, обычная математика
 

Фанат

oncle terrible
Команда форума
цифры интерпретируются по умолчанию как int
Поясни.
Приведенные в примере переменные имеют тип string. Что значит "сразу переводятся" Когда переводятся? В какой момент? Сразу - это когда? сразу после интерпретации? То есть, zval, по сути, всегда таскает два значения - '0000000008' (оригинальное) и '8' (сконвертирвоанное)?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Ром, объяснение очень простое: в MySQL иногда юзают тип данных int zerofill, у нас такое есть. Если ты сравнишь такую запись с числом, полученным из POST и получишь неравенство - проблем будет значительно больше, чем у гиков вроде тебя, которые считают, что строки не должны приводиться.
 

Фанат

oncle terrible
Команда форума
Гриш, в мускуле-то этот зерофил и не дает равенства! :)
PHP:
mysql> select "8" = "000000008";
+-------------------+
| "8" = "000000008" |
+-------------------+
|                 0 |
+-------------------+
 

Yaponchick

Новичок
Меня несколько другое пугает:

PHP:
$a = "000000008";
$b = "00000008";

var_dump($a == $b); // boolean true
А суть проста, доверять "==" нет смысла... спасение только в "===" но тогда пхп превращается в Ся )
 
Сверху