За последние 24 часа нас посетили 45042 программиста и 6420 роботов. Сейчас ищут 1683 программиста ...

Тернарный оператор PHP

Тема в разделе "PHP для новичков", создана пользователем Loony Fox, 23 май 2018.

  1. Loony Fox

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

    С нами с:
    20 май 2018
    Сообщения:
    9
    Симпатии:
    0
    Привет, добрые люди. Продолжаю разбираться с php и возникла следующая задача:

    Есть код, ниже приведен его кусочек.

    PHP:
    1. <?php
    2.  
    3. if (!isset($var)) echo strip_tags ($_POST['surname'])."<br>";
    4. if (empty($_POST['surname'])) echo "<font color=gray><i>Вы не заполнили поле фамилия</i></font>"."<br>";
    5.  
    6. if (!isset($var)) echo strip_tags ($_POST['name'])."<br>";
    7. if (empty($_POST['name'])) echo "<font color=gray><i>Вы не заполнили поле имя</i></font>"."<br>";
    8.  
    9. if (!isset($var)) echo strip_tags ($_POST['patr'])."<br>";
    10. if (empty($_POST['patr'])) echo "<font color=gray><i>Вы не заполнили поле отчество</i></font>"."<br>";
    11.  
    12. if (!isset($var)) echo strip_tags ($_POST['sex'])."<br>";
    13. if (empty($_POST['sex'])) echo "<font color=gray><i>Вы не заполнили поле пол</i></font>"."<br>";
    14.  
    15. ?>
    И вот везде мне необходимо вместо if(isset)... для получения значения из $_POST использовать тернарный оператор.

    Я прочитал много статей на этот счет, везде приводятся примеры с цифрами. Я знаю, что выглядит он следующим образом: "$var = condition ? exp1 : exp2;", Но я не понимаю, что мне необходимо вписать в условие после =

    Буду ну ОЧЕНЬ благодарен если кто-то сможет мне показать , как это сделать на примере хотя бы одной строки из кода.
    Спасибо.
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Ну так возьми и перепиши на if:else;
     
  3. Loony Fox

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

    С нами с:
    20 май 2018
    Сообщения:
    9
    Симпатии:
    0
    не получается, не могу допетрить как именно это надо сделать... я же не просто так попросил показать на примере одной из моих строк кода
    --- Добавлено ---
    @mkramer "? exp1 : exp2;" эта часть мне понятна, большой вопрос к этому: "= condition"
     
  4. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    PHP:
    1. echo (!empty($_POST['surname'])) ? strip_tags($_POST['surname'])."<br>" : "<font color=gray><i>Вы не заполнили поле фамилия</i></font><br>";
    --- Добавлено ---
    схема простая:
    PHP:
    1. (условие) ? true : false;
     
    Loony Fox нравится это.
  5. Loony Fox

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

    С нами с:
    20 май 2018
    Сообщения:
    9
    Симпатии:
    0
    не мог понять, что именно нужно писать в условие
    теперь ясно стало
    Спасибо Вам большущее :)
     
  6. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    на здоровье
    почитай про isset и empty
    их отличия нужно понимать
    переменная может существовать, но быть пустой.
     
  7. Loony Fox

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

    С нами с:
    20 май 2018
    Сообщения:
    9
    Симпатии:
    0
    @TeslaFeo да, понял уже, что тут глубокий пробел начинает образовываться...надо заделывать
    я то еще совсем нуб
    сейчас сразу и побегу читать, еще раз спасибо)
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    @TeslaFeo, empty так использовать опасно, потому что empty("0") === true
     
  9. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.971
    Симпатии:
    753
    @mkramer а что нужно использовать?
     
  10. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    В чем опасность? Может имелось в виду, что не всегда будет ожидаемый результат?
     
  11. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    @Deonis, будет 0 блокировать там, где не надо. База, конечно, не взорвётся от этого, но заказчик может дать в претензию (проходил). Имел в виду именно опасность этого

    @TeslaFeo, ($var ?? "") !== ""
     
  12. Loony Fox

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

    С нами с:
    20 май 2018
    Сообщения:
    9
    Симпатии:
    0
    @mkramer
    а можете пожалуйста показать, как это использовать на примере моего кода? Если несложно, конечно)
     
  13. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    PHP:
    1. echo(($_POST['surname'] ?? "") !== "") ? strip_tags($_POST['surname'])."<br>":"<font color=gray><i>Вы не заполнили поле фамилия</i></font><br>";
    Работает в php 7.0+.

    Чувак, ты заставляешь сомневаться в твоих умственных способностях. Не надо так себя оскорблять
    --- Добавлено ---
    https://secure.php.net/manual/ru/la...on.php#language.operators.comparison.coalesce - подробнее про двойной вопрос
     
  14. Loony Fox

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

    С нами с:
    20 май 2018
    Сообщения:
    9
    Симпатии:
    0
    @mkramer оскорбляешь тут меня только ты
    я делал то же самое, что ты написал, но оно не сработало. Теперь знаю, что из-за версии php

    ... жаль тебя, раз ты считаешь, что дело в умственных способностях (которые у меня в порядке к счастью).
     
  15. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Учиться надо на самом новом PHP, самому новому. 5 ветка уже почти умерла (дла 5.6 только обновления безопасности выходят, до 31 декабря, http://php.net/supported-versions.php)