Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 28/03/13 в 22:06 |
Ответ:
PHP 5.3.19 (cli)
Песдец, протрахался два часа...
|
|
|
|
Z
С нами с 15.05.05
Сообщения: 55188
Рейтинг: 7770
|
Добавлено: 28/03/13 в 22:10 |
интересно былобы узнать мнение прогера, часть скриптов нихрена не хочет заводится, это кривые руки прогеров, или всетаки там, реально маштабные изменения
P.S. я не прогер
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 28/03/13 в 22:13 |
Pentarh писал: | Песдец, протрахался два часа... |
Всё правильно: слева ноль, выражение справа кастится в целое. Если ниписать echo 0 === 'sell'?1:0;, то кастинига не будет, как и двухчасового секса.
|
|
|
|
📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 28/03/13 в 22:21 |
Не совсем очевидно. В джаваскрипте, например, справа будет 1, получается
0 == 1 -> false -> 0
Помоему такой вариант и на пхп должен давать 0 с приведением или без!
Проверил, echo 'sell'?1:0; -> 1
PHP Version 5.3.3 (Видимо ТС тоже в PHP дизайнере проверял!)
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 28/03/13 в 22:39 |
S_Flash писал: | В джаваскрипте, например, справа будет 1 |
Нет, в js справа будет NaN ибо в операторе == операнды кастятся в целое: 0=='sell' <=> 0==Number('sell').
|
|
|
|
+ +
WP-Master
С нами с 17.01.13
Сообщения: 1922
Рейтинг: 1123
|
Добавлено: 28/03/13 в 22:45 |
Yacc: фишка с === равно шикарный тролинг php, ни в одной книжке в СНГ нет описания специфики ==
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 28/03/13 в 22:48 |
Pentarh писал: | echo 0 == 'sell'?1:0; |
вообще то за такие конструкции следует пивом штрафовать. Если в пхп нет явных типов, то не значит, что можно хуй с пальцем сравнивать. Нет, можно конечно, но результат ...
andreich писал: | интересно былобы узнать мнение прогера, часть скриптов нихрена не хочет заводится, это кривые руки прогеров, или всетаки там, реально маштабные изменения |
В основном руки. Ну не было там таких глобальных изменений. А уж по сравнению с тем же питоном или руби - пхп вообще эталон совместимости по версиям
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
5
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 28/03/13 в 22:50 |
Дартаньян: Опять ты хуйню несёшь.
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.
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 28/03/13 в 22:56 |
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
0
|
|
|
📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 28/03/13 в 23:02 |
Yacc писал: | Нет, в js справа будет NaN ибо в операторе == операнды кастятся в целое: 0=='sell' <=> 0==Number('sell'). |
Нет справа будет именно 1
Долго обьяснять не надо. Просто попробуй:
Код: | <script>
alert ('sell'?1:0);
</script> |
Дартаньян: === самое обычное сравнение без приведения типов. (false == 0) - true, так как false приводится к целочисленному (false === 0) - false, так как и так всё понятно.
|
|
|
|
+ +
WP-Master
С нами с 17.01.13
Сообщения: 1922
Рейтинг: 1123
|
Добавлено: 28/03/13 в 23:14 |
Yacc: это ты хуйню городишь, сидишь дома дрочишь, питерские программисты с 5к $ такого не знавали.
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 28/03/13 в 23:16 |
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
|
|
|
|
📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 30/03/13 в 11:48 |
легко проверить
Код: | <script>
if (('sell'?1:0) === true) alert('Boolean')
else if (('sell'?1:0) === 1) alert ('is a 1');
</script> |
Скриншот результата вставить или в этот раз удосужишься проверить?
Только не вставляй гифку с вертящимя хуем!
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 30/03/13 в 12:15 |
S_Flash писал: | Только не вставляй гифку с вертящимя хуем! |
Не буду. Тебе даже это не поможет.
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 30/03/13 в 13:15 |
Обезьянки просыпаются. Даже сюда не поленились зайти, пост минусануть. Ведь Як это так возбуждающе, а минусовать ему посты это вообще лучше чем ебёшь. Сегодня вы не раз кончите, доставайте писюны, готовьтесь.
|
|
|
|
С нами с 04.11.02
Сообщения: 51
Рейтинг: 70
|
Добавлено: 30/03/13 в 16:12 |
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> |
(даёт ноль)
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 30/03/13 в 16:29 |
А смысл ему объяснять? Раз сказал, два сказал, ссылку на стандарт дал. И ведь спорит же ещё.
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 30/03/13 в 16:39 |
Stek писал: | вообще то за такие конструкции следует пивом штрафовать. Если в пхп нет явных типов, то не значит, что можно хуй с пальцем сравнивать. Нет, можно конечно, но результат ...
В основном руки. Ну не было там таких глобальных изменений. А уж по сравнению с тем же питоном или руби - пхп вообще эталон совместимости по версиям |
Это финальная конструкция в чужом софте! Там что то вроде
if ($var == 'sell') { ... }
if ($var == 'buy') { ... }
В процессе выполнения скрипта $var мог принимать значение типа int(0) и я нихуя не понимал какого Х в таком случае оба условия выполняются, что приводит к просто эпической куче глюков.
|
|
|
|
С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506
|
Добавлено: 30/03/13 в 16:48 |
Pentarh писал: | Это финальная конструкция в чужом софте! Там что то вроде
if ($var == 'sell') { ... }
if ($var == 'buy') { ... }
В процессе выполнения скрипта $var мог принимать значение типа int(0) и я нихуя не понимал какого Х в таком случае оба условия выполняются, что приводит к просто эпической куче глюков. |
хех жестко...
|
|
|
|
С нами с 04.11.02
Сообщения: 51
Рейтинг: 70
|
Добавлено: 30/03/13 в 17:11 |
Pentarh: поэтому и надо в таких случаях ставить '==='
У меня был случай (когда я тоже не знал про тройное равно):
if ($a == $b) { ... }, где $a могло принимать вообще любое значение, а $b было шестнадцатеричным хэшем типа 'd60a2f31'.
так вот помимо твоего случая, когда $a = int(0), а строка из $b кастилась в 0, случалось, например, что $a = int(4), $b = '4db37a0d', и условие выполнялось! оказалось, что (int)'4db37a0d' это 4!!!
после этого всегда, когда пишу '==' в коде, 10 раз подумаю, а не нужно ли здесь поставить '==='?
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 30/03/13 в 18:01 |
Вот и я говорю - ебучий тайпкаст
|
|
|
|
📈sflash.biz
С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447
|
Добавлено: 30/03/13 в 18:41 |
Я помоему использовал === в сравнении if (('sell'?1:0) === 1) alert ('is a 1'); это не говорит разве о том, что сравнение произвордится без приведения типов в целочисленному!?
Yacc писал: | А смысл ему объяснять? Раз сказал, два сказал, ссылку на стандарт дал. И ведь спорит же ещё. |
Мало ли что ты сказал! Спецификация для JavaScript это все равно, что как указатели краской на заборе. Всё-равно все решают микрософт и гугл.
Код: |
<script>
alert (typeof ('sell'?1:0));
</script>
|
Скриншот не буду прикреплять!
|
|
|
|
С нами с 04.11.02
Сообщения: 51
Рейтинг: 70
|
Добавлено: 30/03/13 в 19:26 |
S_Flash писал: | Я помоему использовал === в сравнении if (('sell'?1:0) === 1) alert ('is a 1'); это не говорит разве о том, что сравнение произвордится без приведения типов в целочисленному!? |
Да. Но мы о разных условиях - ты говоришь о преобразовании во внешнем условии if (условие1) === 1, тут как раз вопросов не возникает. А я (и Yacc тоже) говорю о внутреннем условии - условие2?1:0. Так вот в этой части происходит преобразование 'sell' к Boolean.
|
|
|
|
С нами с 04.11.02
Сообщения: 51
Рейтинг: 70
|
Добавлено: 30/03/13 в 19:30 |
S_Flash: Ааа, всё, я понял!!! Ты неправильно прочитал/понял код в первом посте! Ты его понял так: echo 0 == ('sell'?1:0); А на самом деле так: echo (0 == 'sell')?1:0; отсюда непонимание права-лева. Поставь мысленно скобки и перечитай весь топик.
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 30/03/13 в 20:27 |
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 |
Вроде всё понятно объяснил (кто не понял?), ссылку дал, но тебе похуй на стандарты и ты продолжаешь тупить. Зачем?
|
|
|
|