
31.07.2009, 15:48
|
|
Познающий
Регистрация: 11.09.2008
Сообщений: 99
С нами:
9296966
Репутация:
585
|
|
jokester
Интерпретатор переводит строку к числу, когда у нее первый символ - цифра, если второй операнд - числовой (как в твоем примере). Но я в тех примерах сравнивал по две строки, а не числа со строками.
К тому же, если интерпретатор просто переводит эти строки в числа, то с нулем в начале, он по логике вещей скорее должен был бы считать их восьмеричными числами, но это не так: 0789 - не восьмеричное число.
По сути, скорее всего пхп сравнивает:
'' c '' (пустые строки)
'789' и '789' (именно строки, а не числа)
и строки '00abc' и '0000abc' - при наличии букв нули в строках не убираются, даже если вставить цифры:
Код:
<?php
if ( '0012a' == '000012a' ) echo "Условие верно";
?>
Результатом условия будет false.
add: впрочем, это пока просто мои предоложения - как будет время покопаюсь в сорсах php по этому поводу.
Последний раз редактировалось cr0w; 31.07.2009 в 15:57..
|
|
|

31.07.2009, 19:14
|
|
Познавший АНТИЧАТ
Регистрация: 18.02.2008
Сообщений: 1,136
С нами:
9593606
Репутация:
4915
|
|
cr0w
Он так-же приведёт строки к числу если обе строки состоят только из цифр.
add/
Так что вроде всё логично. Это строки, т.к. буквы присутствуют:
Код:
if ( '0012a' == '000012a' ) echo "Условие верно";
А вот это уже числа:
if ( 4 == '4abc' ) // сдесь т.к. один из операндов число
if ( '000' == '000000' ) // ну а тут
if ( '00789' == '000000000789' ) // всё числа
PS Спасибо Qwazar, направил на путь истиный 
Последний раз редактировалось jokester; 31.07.2009 в 19:58..
|
|
|

31.07.2009, 23:12
|
|
Reservists Of Antichat - Level 6
Регистрация: 15.03.2009
Сообщений: 560
С нами:
9030566
Репутация:
2017
|
|
раз удалил тему мою кто то напишу тут
есть XSS спер куки...тока спер я PHPSESSID а с логином и пассом куки не сперлось
что это мне дает? можно ли что нибудь с этим сделать?
|
|
|

01.08.2009, 05:07
|
|
Познающий
Регистрация: 21.04.2009
Сообщений: 58
С нами:
8976725
Репутация:
34
|
|
Сообщение от HAXTA4OK
раз удалил тему мою кто то напишу тут
есть XSS спер куки...тока спер я PHPSESSID а с логином и пассом куки не сперлось
что это мне дает? можно ли что нибудь с этим сделать?
Можно попробовать вставить в браузер, будешь авторизован на сайте автоматом, единственный минус идентификаторы долго не живут.
|
|
|

31.07.2009, 23:33
|
|
Познающий
Регистрация: 11.09.2008
Сообщений: 99
С нами:
9296966
Репутация:
585
|
|
jokester
В целом, ты тут прав.
Хотя насчет "логичности" таких преобразований типов можно было бы поспорить. Но в документации такое поведение, вобщем-то, кое-как зафиксировано, т.ч. ресерчить тут вроде как и нечего.
Последний раз редактировалось cr0w; 31.07.2009 в 23:36..
|
|
|

31.07.2009, 23:37
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
С нами:
11020706
Репутация:
4693
|
|
cr0w, да логично, логично.
Если один из операндов однозначно число, то оба операнда приводятся к числам, и сравниваются как числа.
Если оба записаны в виде строк, то проверяется числа это или строки, если числа, то сравниваются как числа, если хотябы один операнд однозначно не число, то сравниваются как строки, посимвольно.
Логично 
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
|
|
|

31.07.2009, 23:58
|
|
Познающий
Регистрация: 11.09.2008
Сообщений: 99
С нами:
9296966
Репутация:
585
|
|
Qwazar
Нелогично в том плане, что числа в пхп могут быть не только десятичными. И тут возникает "неоднозначность", когда в строке находится число, начинающееся с нуля. Почему пхп приводит его к десятичному числу, отбросив нули, а не к восьмеричному (кстати, это не только в пхп так, но и в perl, например) ? (;
|
|
|

01.08.2009, 13:00
|
|
Leaders of Antichat - Level 4
Регистрация: 02.06.2005
Сообщений: 1,411
С нами:
11020706
Репутация:
4693
|
|
Сообщение от cr0w
Qwazar
Нелогично в том плане, что числа в пхп могут быть не только десятичными. И тут возникает "неоднозначность", когда в строке находится число, начинающееся с нуля. Почему пхп приводит его к десятичному числу, отбросив нули, а не к восьмеричному (кстати, это не только в пхп так, но и в perl, например) ? (;
Ты использовал только цифры 0-7 ? С плавающими числами всех видов норм приводит к числу. С восьмеричными не пробовал.
__________________
Я отдал бы немало за пару крыльев,
Я отдал бы немало за третий глаз
За руку на которой четырнадцать пальцев
Мне нужен для дыхания другой газ..
Мой блог: http://qwazar.ru/.
|
|
|

01.08.2009, 18:19
|
|
Познающий
Регистрация: 11.09.2008
Сообщений: 99
С нами:
9296966
Репутация:
585
|
|
Сообщение от Qwazar
Ты использовал только цифры 0-7 ? С плавающими числами всех видов норм приводит к числу. С восьмеричными не пробовал.
Например:
Код:
<?php
if ( 12 == '12' ) echo "Условие 1 верно. ";
if ( 012 == '012' ) echo "Условие 2 верно. ";
if ( 0x1A == '0x1A' ) echo "Условие 3 верно.";
?>
выведет
Условие 1 верно. Условие 3 верно.
Шестнадцатеричные числа - нормально преобразуются из строки в число, восмеричные - нет. Собственно, в этом и вижу некоторую "нелогичность" такого поведения интерпретатора.
|
|
|

01.08.2009, 05:30
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
С нами:
9649706
Репутация:
3338
|
|
как и любые остальные куки - время жизни есть у всего. Вы вообще, хоть раз в жизни, смотрели свои куки на форумах всяческих? Что, везде прямо таки md5 и лежит? Давно уже пора привыкнуть, что если хотя бы сессия есть - уже круто. Про пароли забудьте раз и навсегда на бол-мен нормальных ресурсах
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|