Условные операторы ? false : true;

Тема в разделе "Как сделать...", создана пользователем асс, 1 фев 2014.

Статус темы:
Закрыта.
  1. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    Добрый вечер!

    Скажите пожалуйста как расшифровать подобную запись?


    PHP:
     return ($str == '') ? false true;
    и можно ли ее использовать в место
    PHP:
     if(){} ;
    Например у меня есть такой код

    PHP:

    if($template){echo '0';} else {echo '1';}
     
  2. jDony

    jDony Создатель

    Регистр.:
    25 янв 2014
    Сообщения:
    41
    Симпатии:
    40
    Читаем http://php.net/manual/ru/language.operators.comparison.php , а точнее раздел "Тернарный оператор"

    PHP:
    return ($str == '') ? false true;
    Расшифровывается как:
    - Если $str пустая
    - То возврщаем false
    - иначе возвращаем true

    PHP:
    if () {}
    использовать можно. Тернарный оператор - просто более удобный способ записи.

    Если в кратце:
    (условие) ? [да] : [нет]

    PHP:
    if (условие)
    { [
    да] }
    else
    { [
    нет] }
     
    асс нравится это.
  3. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    jDony, Спасибо щас поглядел в википедии, теперь буду знать.
    А если три тогда лучше свич?

    Я щас делаю так

    Если надо одно значение типа если 1 то выполняем
    Код:
    if($contact_form==1){
    echo "Делать форму";}

    Если мне надо 3 и более значений в зависимости от выбора то делаю так

    Код:
    //курим,  бухаем, курим и бухаем )))
    switch ($gen_metod) {
    case 1:
    //рандомно
    echo "курим и бухаем";
    break;
    case 2:
    echo "  бухае";
    break;
    case 3:
    //Для мужчин
    echo " мужчин";
    break;
    }
     
  4. jDony

    jDony Создатель

    Регистр.:
    25 янв 2014
    Сообщения:
    41
    Симпатии:
    40
    Для абстрактного случая:
    - Да тут следует использовать switch оператор, так как if сильно захламляют код, когда их много.
     
  5. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.404
    Симпатии:
    1.185
    Для трёх значений тоже можно использовать тернарный оператор:
    PHP:
    echo ($gen_metod == 1) ? "курим и бухаем" : ($gen_metod == "  бухае" " мужчин");
    Запись более лаконичная, но есть риск неверно расставить скобки :)
    Начинающие программисты зависнут надолго на такой строке :-]
     
    асс нравится это.
  6. stealthdebuger

    stealthdebuger Механик

    Administrator
    Регистр.:
    25 авг 2008
    Сообщения:
    624
    Симпатии:
    1.379
    Это вряд ли... Я не завис.
     
  7. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.404
    Симпатии:
    1.185
    Сейчас не завис или много лет назад когда был начинающим?
    Для меня тернарные операторы когда-то давно представляли лёгкую обфускацию кода, затрудняющую восприятие и как я понял я не одинок :)
     
  8. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    749
    Симпатии:
    220
    Как заставить работать этот код?
    Не хочет работать
    PHP:
      $name    = isset($_POST['name']) ? $_POST['name'] : "guest";
    Из формы получаю данные, если форма пуста то должен отдавать guest, то что идет после :
     
  9. sCrypt

    sCrypt Создатель

    Регистр.:
    11 авг 2008
    Сообщения:
    23
    Симпатии:
    12
    возможно у вас в переменной $_POST['name'] пусто, лучше такой способ
    PHP:
    $name = !empty($_POST['name']) ? $_POST['name'] : "guest"
     
    асс нравится это.
  10. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    191
    Такие конструкции очень часто встречаются.
    Мне надоело писать часто эти проверки, и сделал функцию:
    PHP:
    function post($value,$no_value=''){
    return (isset(
    $_POST[$value])?$_POST[$value]:$no_value);
    }
    Теперь если надо проверить значение так как это:
    PHP:
    $name = isset($_POST['name']) ? $_POST['name'] : "guest";
    то я пишу что-то вроде:
    PHP:
    $name post('name','guest');
    То же самое и для get, request параметров:)
     
    асс нравится это.
Статус темы:
Закрыта.