Объясните ламеру и идиоту этот код:
$login = !empty($_POST['login'])?$_POST['login']:null;
всегда забирал переменные из массива $_POST тупо так: $var = $_POST['var'], но в чужой работе повстречал это.
Немного кумеканья мозгами и я понял, что если переменная существует, тогда она присваевается, а если нет, то она остается пустой. А смысл, память-то занимать она все равно будет?
А дальше - я не понял. Для начала - что значит вопросительный знак. Что-то мне подсказывает, что это после него идет либо то, что делается если переменной несуществует, либо...
Потом что? Ведь переменную из пост-массива нельзя изменить или обнулить, что ж тут тогда происходит? Да и двоеточие что-то не совсем понятно.
Заранее спасибо за тырканье носом в FAQ =)
Спустя 27 минут, 6 секунд (7.11.2009 - 22:30) sergeiss написал(а):
Данная конструкция будет более правильной так:
и "расшифровывется" так: если установлена переменная (в данном случае есть определенный элемента в массиве), то вернуть эту переменную и присвоить переменной $login; иначе - установить величину $login в null.
Эта конструкция "пришла" из языка Си.
переменная = условие ? взять_если_условие_верно : взять_если_условие_не_верно;
$login = isset($_POST['login']) ? $_POST['login'] : null;
и "расшифровывется" так: если установлена переменная (в данном случае есть определенный элемента в массиве), то вернуть эту переменную и присвоить переменной $login; иначе - установить величину $login в null.
Эта конструкция "пришла" из языка Си.
переменная = условие ? взять_если_условие_верно : взять_если_условие_не_верно;
Спустя 8 минут, 2 секунды (7.11.2009 - 22:38) 7ion написал(а):
Спасибо большое за объяснение!
А собственно, какая разница (кроме того, что наверное это будет грамотнее) между простым присвоением переменной из пост-массива и с этим условием? Ведь если ее не будет, переменной этой, то тогда и так присвоится пустота переменной, что и символизирует null.
А собственно, какая разница (кроме того, что наверное это будет грамотнее) между простым присвоением переменной из пост-массива и с этим условием? Ведь если ее не будет, переменной этой, то тогда и так присвоится пустота переменной, что и символизирует null.
Спустя 48 минут, 55 секунд (7.11.2009 - 23:27) sergeiss написал(а):
Если переменной нету в массиве ПОСТ, то тогда ошибка будет (если не выключен показ предупреждений и ошибок). Поэтому такое присвоение (как я показал) - наиболее правильное.
Спустя 1 час, 3 минуты, 50 секунд (8.11.2009 - 00:31) 7ion написал(а):
Спасибо большое, буду использовать это =)
Спустя 46 минут, 28 секунд (8.11.2009 - 01:17) haZe написал(а):
А что быстрее работает конструкция ?: или if?
Спустя 23 минуты, 53 секунды (8.11.2009 - 01:41) glock18 написал(а):
бессмысленный вопрос
как и сравнение скорости echo $i . 'str' и echo "{$i}str";
все эти "повышения/понижения" потеряют смысл, когда... ну, скажем, одну лишнюю итерацию массиву. один простейший запрос займет времени гораздо больше. что здесь сравнивать то?
как и сравнение скорости echo $i . 'str' и echo "{$i}str";
все эти "повышения/понижения" потеряют смысл, когда... ну, скажем, одну лишнюю итерацию массиву. один простейший запрос займет времени гораздо больше. что здесь сравнивать то?
Спустя 42 минуты, 58 секунд (8.11.2009 - 02:24) sergeiss написал(а):
Цитата (haZe @ 8.11.2009 - 02:17) |
А что быстрее работает конструкция ?: или if? |
Цитата (glock18 @ 8.11.2009 - 02:41) |
бессмысленный вопрос |
Ну почему же... Быстрее работает ?:, вот только разница настолько небольшая, что ее не имеет смысла учитывать
На форуме по С++ однажды подсчитывали количество операций процессора, при обработке этими конструкциями целых чисел. Получили, что ?: занимает то ли на 1 такт процессора меньше, то ли на 2 При общем количестве тактов меньше 10 (7-8, вроде бы).
Я думаю, что каждый сам подсчитает, сколько это займет времени (какая будет разница), если процессор выполняет хотя бы пару миллионов тактов в секунду
Спустя 13 минут, 6 секунд (8.11.2009 - 02:37) glock18 написал(а):
sergeiss
этого не понимают, если такие вопросы задают всерьез. А послушав тебя, дак и не поймут, думаю. Только решат, что "да, :? быстрее".
этого не понимают, если такие вопросы задают всерьез. А послушав тебя, дак и не поймут, думаю. Только решат, что "да, :? быстрее".
Спустя 17 минут, 12 секунд (8.11.2009 - 02:54) SunSet написал(а):
glock18
Та нет, не решат. Кто писал через иф - тот точно так же и будет продолжать.
Та нет, не решат. Кто писал через иф - тот точно так же и будет продолжать.
Спустя 38 минут, 56 секунд (8.11.2009 - 03:33) sergeiss написал(а):
glock18 - "имеющий уши да услышит". А кто не поймет, так и ладно. Хотя бы знать будет человек про эту конструкцию, да использовать ее будет. Так ведь и за умного сойдет
Спустя 2 часа, 5 минут, 47 секунд (8.11.2009 - 05:39) Gabriel написал(а):
sergeiss
на меня намикаеш?
на меня намикаеш?
Спустя 30 минут, 26 секунд (8.11.2009 - 06:09) SunSet написал(а):
sergeiss
Только ленивый и слепой не встречал эту конструкцию тут на форуме)) Ею твин уже везде обжужжал))
Только ленивый и слепой не встречал эту конструкцию тут на форуме)) Ею твин уже везде обжужжал))