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;, то кастинига не будет, как и двухчасового секса. icon_smile.gif
цитата
28/03/13 в 22:21
 S_Flash
Не совсем очевидно. В джаваскрипте, например, справа будет 1, получается
0 == 1 -> false -> 0

Помоему такой вариант и на пхп должен давать 0 с приведением или без!
Проверил, echo 'sell'?1:0; -> 1 icon_eek.gif

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;


вообще то за такие конструкции следует пивом штрафовать. Если в пхп нет явных типов, то не значит, что можно хуй с пальцем сравнивать. Нет, можно конечно, но результат ... smail101.gif


andreich писал:
интересно былобы узнать мнение прогера, часть скриптов нихрена не хочет заводится, это кривые руки прогеров, или всетаки там, реально маштабные изменения

В основном руки. Ну не было там таких глобальных изменений. А уж по сравнению с тем же питоном или руби - пхп вообще эталон совместимости по версиям icon_lol.gif
цитата
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 smail101.gif
цитата
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: trollface.png это ты хуйню городишь, сидишь дома дрочишь, питерские программисты с 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>

Скриншот результата вставить или в этот раз удосужишься проверить?
Только не вставляй гифку с вертящимя хуем! smail101.gif
цитата
30/03/13 в 12:15
 Yacc
S_Flash писал:
Только не вставляй гифку с вертящимя хуем!

Не буду. Тебе даже это не поможет.
цитата
30/03/13 в 13:15
 Yacc
Обезьянки просыпаются. Даже сюда не поленились зайти, пост минусануть. Ведь Як это так возбуждающе, а минусовать ему посты это вообще лучше чем ебёшь. Сегодня вы не раз кончите, доставайте писюны, готовьтесь. smail101.gif
цитата
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>

(даёт ноль)
icon_wink.gif
цитата
30/03/13 в 16:29
 Yacc
А смысл ему объяснять? Раз сказал, два сказал, ссылку на стандарт дал. И ведь спорит же ещё.
цитата
30/03/13 в 16:39
 Pentarh
Stek писал:
вообще то за такие конструкции следует пивом штрафовать. Если в пхп нет явных типов, то не значит, что можно хуй с пальцем сравнивать. Нет, можно конечно, но результат ... smail101.gif



В основном руки. Ну не было там таких глобальных изменений. А уж по сравнению с тем же питоном или руби - пхп вообще эталон совместимости по версиям icon_lol.gif


Это финальная конструкция в чужом софте! Там что то вроде

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
Вот и я говорю - ебучий тайпкаст smail101.gif
цитата
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>

Скриншот не буду прикреплять! icon_wink.gif
цитата
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; отсюда непонимание права-лева. Поставь мысленно скобки и перечитай весь топик. icon_wink.gif
цитата
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

Вроде всё понятно объяснил (кто не понял?), ссылку дал, но тебе похуй на стандарты и ты продолжаешь тупить. Зачем?


Эта страница в полной версии