За последние 24 часа нас посетил 19871 программист и 1415 роботов. Сейчас ищет 1251 программист ...

? знак вопроса что такое тернарный оператор

Тема в разделе "PHP для новичков", создана пользователем newagno, 28 фев 2015.

  1. newagno

    newagno Новичок

    С нами с:
    28 фев 2015
    Сообщения:
    2
    Симпатии:
    0
    $a=isset($_GET['a']) ? $_GET['a'] : 0 ;
    объясните что за двоеточие и 0 в конце - без них почему то переменная считывается как булиевая
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    AlexandrS нравится это.
  3. newagno

    newagno Новичок

    С нами с:
    28 фев 2015
    Сообщения:
    2
    Симпатии:
    0
    Re: что это такое объясните пожалста

    спасибо - дошло)
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: ? знак вопроса что такое тенарный оператор

    Это наверное единственная фигня в программировании, которую пока не узнаешь, как зовётся - не можешь никак назвать. =)
     
  5. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Re: ? знак вопроса что такое тенарный оператор

    В названии темы неправильно написано слово - тернарный
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Точно, спс, поправил.
     
  7. Dilon

    Dilon Активный пользователь

    С нами с:
    4 май 2014
    Сообщения:
    119
    Симпатии:
    4
    Адрес:
    соседний двор
    О я тоже знаю, я кэп. :))) (Кстати как ставить смайлики?)

    ? этот знак означает союз "то" (если это так, ТО это вот так). А " : " означает или.

    A так я видел такое чаще в условиях if. Уважаемые программисты, можно так писать? И что это означает?
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Не или, а иначе, наверное.
     
  9. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Можно, но не всегда нужно. В некоторых случаях они полезны, для примера:
    Код (PHP):
    1. $value = ($value === 'Yes') ? true : false;
    Т.е. какая-то операция с условием, которую можно уместить в одну строчку, код получается чистый и наглядный. Если же ты суешь тернарник в if или в другой тернарник, то код получается не интуитивным, т.е. на этой строке придется остановиться и разобраться что в итоге получается. Потенциально, возможен косяк который сходу и не заметишь.

    Всё хорошо в меру ))
     
  10. Dilon

    Dilon Активный пользователь

    С нами с:
    4 май 2014
    Сообщения:
    119
    Симпатии:
    4
    Адрес:
    соседний двор
    Да точно.
    Очень познавательно.
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Недавно на этом форуме узнал, что есть краткая форма этой краткой формы - можно опустить then часть.
     
  12. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Не на всех версиях пыха работать будет.
    И да, тернарный оператор - это не краткая форма IF.

    Отличия в том, что if как таковой просто проверяет условие и запускает блок кода, в то время как тернарный оператор является выражением. Он не просто запускает ветвление кода, он возвращает значения, сгенерированные в его секциях.
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да. Его можно всунуть в середину строки, да.
     
  14. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Главное не забыть взять в скобки
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Главное не забыть взять все его секции в скобки тоже, потому что в пыхе он просто волшебен.
    Избитый пример:

    Код (PHP):
    1. $arg = 'T';
    2. $vehicle = ( ( $arg == 'B' ) ? 'bus' :
    3.              ( $arg == 'A' ) ? 'airplane' :
    4.              ( $arg == 'T' ) ? 'train' :
    5.              ( $arg == 'C' ) ? 'car' :
    6.              ( $arg == 'H' ) ? 'horse' :
    7.              'feet' );
    8. echo $vehicle; //Выведет horse, лалала.
    А если нахреначить скобочек, такого не будет. В 95% языков будет адекватно работать и без них, да. Но пых - особенный...
     
  16. Dilon

    Dilon Активный пользователь

    С нами с:
    4 май 2014
    Сообщения:
    119
    Симпатии:
    4
    Адрес:
    соседний двор
    хМ! Будем знать, будем знать.

    Точно,я сморозил глупость. Это выражение не относится к условию if. маненько перепутал.
     
  17. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.585
    Симпатии:
    1.762
    А начерта здесь тернарник? Я бы понял, если бы было наоборот
    Код (Text):
    1.  
    2. $value = ($value === true) ? "yes": "no";
    А в таком виде как у вас и без него сработает.
     
  18. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а что, строка "No" трактуется как логически ложное значение?
    Код (Text):
    1.  php -r '$a="no"; echo $a ? 1 : 0;'
    2. 1
    автор приводит строковый ответ в логическое значение. всё ок.
     
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.585
    Симпатии:
    1.762
    Ganzal,
    Код (Text):
    1.  
    2. $value = "no";
    3.  
    4. var_export(($value === 'Yes') ? true : false);
    5. echo "<br>";
    6. var_export(($value === 'Yes'));
    результат:
    Код (Text):
    1.  
    2. false
    3. false
     
  20. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    mkramer, а, ты про то что можно опустить тернарный. понял. да, лишнее действие.
     
  21. Scogzhe

    Scogzhe Зэк
    [ БАН ]

    С нами с:
    4 фев 2015
    Сообщения:
    109
    Симпатии:
    0
    if else типа
     
  22. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    Нет, ещё эта стрелочка: $model->username
     
  23. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Увы, эта стрелочка не имеет названия. Стрелочка и стрелочка. Ну разве что "оператор доступа к свойствам и методам объекта согласно их модификатору доступа".
     
  24. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Привел бы сразу
    Код (Text):
    1.  
    2. $a = 0 ?: 1;
    Но! Приводимость может состроить злую штуку.
     
  25. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну так и привел бы сразу пример. а то вон Игоряше высказал и сам туда же