Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Люблю блин пхп...
Новая тема
Ответить
цитата
28/03/13 в 22:06
Pentarh
<?php
echo 0 == 'sell'?1:0;
Ответ:
1
PHP 5.3.19 (cli)
Песдец, протрахался два часа...
цитата
28/03/13 в 22:10
andreich
Pentarh писал:
PHP 5.3.x
интересно былобы узнать мнение прогера, часть скриптов нихрена не хочет заводится, это кривые руки прогеров, или всетаки там, реально маштабные изменения
P.S. я не прогер
цитата
28/03/13 в 22:13
Yacc
Pentarh писал:
Песдец, протрахался два часа...
Всё правильно: слева ноль, выражение справа кастится в целое. Если ниписать echo 0 === 'sell'?1:0;, то кастинига не будет, как и двухчасового секса.
цитата
28/03/13 в 22:21
S_Flash
Не совсем очевидно. В джаваскрипте, например, справа будет 1, получается
0 == 1 -> false -> 0
Помоему такой вариант и на пхп должен давать 0 с приведением или без!
Проверил, echo 'sell'?1:0; -> 1
PHP Version 5.3.3 (Видимо ТС тоже в PHP дизайнере проверял!)
цитата
28/03/13 в 22:39
Yacc
S_Flash писал:
В джаваскрипте, например, справа будет 1
Нет, в js справа будет NaN ибо в операторе == операнды кастятся в целое: 0=='sell' <=> 0==Number('sell').
цитата
28/03/13 в 22:45
Дартаньян
Yacc:
фишка с === равно шикарный тролинг php, ни в одной книжке в СНГ нет описания специфики ==
цитата
28/03/13 в 22:48
Stek
Pentarh писал:
echo 0 == 'sell'?1:0;
вообще то за такие конструкции следует пивом штрафовать. Если в пхп нет явных типов, то не значит, что можно хуй с пальцем сравнивать. Нет, можно конечно, но результат ...
andreich писал:
интересно былобы узнать мнение прогера, часть скриптов нихрена не хочет заводится, это кривые руки прогеров, или всетаки там, реально маштабные изменения
В основном руки. Ну не было там таких глобальных изменений. А уж по сравнению с тем же питоном или руби - пхп вообще эталон совместимости по версиям
цитата
28/03/13 в 22:50
Yacc
Дартаньян:
Опять ты хуйню несёшь.
http://php.net/manual/en/language.operators.comparison.php
If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically. These rules also apply to the switch statement. The type conversion does not take place when the comparison is === or !== as this involves comparing the type as well as the value.
цитата
28/03/13 в 22:56
Stek
Yacc:
Дартаньян говорил про русский вариант, так что:
http://www.php.net/manual/ru/language.operators.comparison.php
цитата
28/03/13 в 23:02
S_Flash
Yacc писал:
Нет, в js справа будет NaN ибо в операторе == операнды кастятся в целое: 0=='sell' <=> 0==Number('sell').
Нет справа будет именно 1
Долго обьяснять не надо. Просто попробуй:
Код:
<script>
alert ('sell'?1:0);
</script>
Дартаньян:
=== самое обычное сравнение без приведения типов. (false == 0) - true, так как false приводится к целочисленному (false === 0) - false, так как и так всё понятно.
цитата
28/03/13 в 23:14
Дартаньян
Yacc:
это ты хуйню городишь, сидишь дома дрочишь, питерские программисты с 5к $ такого не знавали.
цитата
28/03/13 в 23:16
Yacc
S_Flash писал:
Нет справа будет именно 1
Долго обьяснять не надо. Просто попробуй:
А я говорю будет NaN, просто почитай спецификацию:
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
То что ты показываешь будет кастится в Boolean:
'sell'?1:0 <=> !true==!'sell'?1:0 <=> !true==!Boolean('sell')?1:0
цитата
30/03/13 в 11:48
S_Flash
Yacc писал:
А я говорю будет NaN, просто почитай спецификацию:
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
легко проверить
Код:
<script>
if (('sell'?1:0) === true) alert('Boolean')
else if (('sell'?1:0) === 1) alert ('is a 1');
</script>
Скриншот результата вставить или в этот раз удосужишься проверить?
Только не вставляй гифку с вертящимя хуем!
цитата
30/03/13 в 12:15
Yacc
S_Flash писал:
Только не вставляй гифку с вертящимя хуем!
Не буду. Тебе даже это не поможет.
цитата
30/03/13 в 13:15
Yacc
Обезьянки просыпаются. Даже сюда не поленились зайти, пост минусануть. Ведь Як это так возбуждающе, а минусовать ему посты это вообще лучше чем ебёшь. Сегодня вы не раз кончите, доставайте писюны, готовьтесь.
цитата
30/03/13 в 16:12
Rolan
S_Flash:
alert ('sell'?1:0); даёт единицу, т.к. в этом случае 'sell' преобразуется к Boolean true
http://es5.javascript.ru/x11.html#x11.12
, если же поставить сравнение: булеан_или_число == 'sell'?1:0 , то оба операнда будут преобразованы к числу
http://es5.javascript.ru/x11.html#x11.9.3
, а Number('sell') в яваскрипт - это NaN, который не равен ни чему другому, ни даже себе.
Код:
<script>
alert (Number('sell'));
</script>
можешь проверить, кстати:
Код:
<script>
alert (true=='sell'?1:0);
</script>
(даёт ноль)
цитата
30/03/13 в 16:29
Yacc
А смысл ему объяснять? Раз сказал, два сказал, ссылку на стандарт дал. И ведь спорит же ещё.
цитата
30/03/13 в 16:39
Pentarh
Stek писал:
вообще то за такие конструкции следует пивом штрафовать. Если в пхп нет явных типов, то не значит, что можно хуй с пальцем сравнивать. Нет, можно конечно, но результат ...
В основном руки. Ну не было там таких глобальных изменений. А уж по сравнению с тем же питоном или руби - пхп вообще эталон совместимости по версиям
Это финальная конструкция в чужом софте! Там что то вроде
if ($var == 'sell') { ... }
if ($var == 'buy') { ... }
В процессе выполнения скрипта $var мог принимать значение типа int(0) и я нихуя не понимал какого Х в таком случае оба условия выполняются, что приводит к просто эпической куче глюков.
цитата
30/03/13 в 16:48
idk2045
Pentarh писал:
Это финальная конструкция в чужом софте! Там что то вроде
if ($var == 'sell') { ... }
if ($var == 'buy') { ... }
В процессе выполнения скрипта $var мог принимать значение типа int(0) и я нихуя не понимал какого Х в таком случае оба условия выполняются, что приводит к просто эпической куче глюков.
хех жестко...
цитата
30/03/13 в 17:11
Rolan
Pentarh:
поэтому и надо в таких случаях ставить '==='
У меня был случай (когда я тоже не знал про тройное равно):
if ($a == $b) { ... }, где $a могло принимать вообще любое значение, а $b было шестнадцатеричным хэшем типа 'd60a2f31'.
так вот помимо твоего случая, когда $a = int(0), а строка из $b кастилась в 0, случалось, например, что $a = int(4), $b = '4db37a0d', и условие выполнялось! оказалось, что (int)'4db37a0d' это 4!!!
после этого всегда, когда пишу '==' в коде, 10 раз подумаю, а не нужно ли здесь поставить '==='?
цитата
30/03/13 в 18:01
Pentarh
Вот и я говорю - ебучий тайпкаст
цитата
30/03/13 в 18:41
S_Flash
Rolan писал:
alert ('sell'?1:0); даёт единицу, т.к. в этом случае 'sell' преобразуется к Boolean true
http://es5.javascript.ru/x11.html#x11.12
, если же поставить сравнение: булеан_или_число == 'sell'?1:0 , то оба операнда будут преобразованы к числу
http://es5.javascript.ru/x11.html#x11.9.3
, а Number('sell') в яваскрипт - это NaN, который не равен ни чему другому, ни даже себе.
Я помоему использовал === в сравнении if (('sell'?1:0) === 1) alert ('is a 1'); это не говорит разве о том, что сравнение произвордится без приведения типов в целочисленному!?
Yacc писал:
А смысл ему объяснять? Раз сказал, два сказал, ссылку на стандарт дал. И ведь спорит же ещё.
Мало ли что ты сказал! Спецификация для JavaScript это все равно, что как указатели краской на заборе. Всё-равно все решают микрософт и гугл.
Код:
<script>
alert (typeof ('sell'?1:0));
</script>
Скриншот не буду прикреплять!
цитата
30/03/13 в 19:26
Rolan
S_Flash писал:
Я помоему использовал === в сравнении if (('sell'?1:0) === 1) alert ('is a 1'); это не говорит разве о том, что сравнение произвордится без приведения типов в целочисленному!?
Да. Но мы о разных условиях - ты говоришь о преобразовании во внешнем условии if (условие1) === 1, тут как раз вопросов не возникает. А я (и Yacc тоже) говорю о внутреннем условии - условие2?1:0. Так вот в этой части происходит преобразование 'sell' к Boolean.
цитата
30/03/13 в 19:30
Rolan
S_Flash:
Ааа, всё, я понял!!! Ты неправильно прочитал/понял код в первом посте! Ты его понял так: echo 0 == ('sell'?1:0); А на самом деле так: echo (0 == 'sell')?1:0; отсюда непонимание права-лева. Поставь мысленно скобки и перечитай весь топик.
цитата
30/03/13 в 20:27
Yacc
S_Flash писал:
Скриншот не буду прикреплять!
Ладно ткну тебя ещё раз, раз ты такой упёртый.
Yacc писал:
echo 0 === 'sell'?1:0;
S_Flash писал:
В джаваскрипте, например,
справа
будет 1, получается
0 == 1 -> false -> 0
Я выделил жирным твоё "справа". То есть здесь ты понимаешь, что "справа" это 'sell' в выражении 0=='sell'. Я пишу:
Yacc писал:
Нет, в js справа будет NaN ибо в операторе == операнды кастятся в целое: 0=='sell' <=> 0==Number('sell').
Обрати внимание о каком выражении идёт речь. Дальше ты заменяешь это выражение другим и начинаешь тупить:
S_Flash писал:
Нет справа будет именно 1
Долго обьяснять не надо. Просто попробуй:
Код:
<script>
alert ('sell'?1:0);
</script>
Вот где тут справа то, что будет равно 1? Сразу заметив ошибку я пишу:
Yacc писал:
То что ты показываешь будет кастится в Boolean:
'sell'?1:0 <=> !true==!'sell'?1:0 <=> !true==!Boolean('sell')?1:0
Вроде всё понятно объяснил (кто не понял?), ссылку дал, но тебе похуй на стандарты и ты продолжаешь тупить. Зачем?
Новая тема
Ответить
Эта страница в полной версии