За последние 24 часа нас посетили 191735 программистов и 2014 роботов. Сейчас ищут 1969 программистов ...

isset+empty

Тема в разделе "PHP для новичков", создана пользователем Klin, 15 июл 2010.

  1. Klin

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

    С нами с:
    15 май 2008
    Сообщения:
    82
    Симпатии:
    0
    Не могу разобраться, зачем писать так
    PHP:
    1.  
    2. if (isset($_POST['var']) && !empty($_POST['var'])) {
    3.     $var = $_POST['var'];  
    4. }
    5.  else {    
    6.     die('Заполните все поля'); 
    7. }
    8.  
    Зачем писать isset() если empty() проверяет на инициализацию и на null, а isset() только на инициализацию?
     
  2. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Klin
    "Если существует $_POST['var'] и она не пустая - то присваиваем $var ее значение"

    Можно и по-другому.
    $var = isset($_POST['var'])?$_POST['var']:null;

    if(!empty($var))
    {
    чтото
    }
    else exit();



    Если просто проверять if(!empty($_POST['var'])) можно получить Notice, что не есть гуд.
     
  3. Klin

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

    С нами с:
    15 май 2008
    Сообщения:
    82
    Симпатии:
    0
    в том то и проблема, php.ini стоит error_reporting = E_ALL и никаких Notice не получаю, может в 5.3.1 убрали?
     
  4. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    error_reporting = E_ALL & ~E_NOTICE
     
  5. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    empty() проверяет на пустую строку, null, 0 и false. Неинициализированная переменная так же содержит null. На существование эта конструкция не проверяет. Но, из-за двойственности возникновения этого самого null нотисы и не выбрасываются.

    isset() наоборот проверяет, что переменная была создана, пусть даже с нулевым значением.
    Скажем так: приходя в магазин мы сначала достаём кошелёк и только потом расплачиваемся.

    Хотя, никто не заставляет использовать эту форму записи.
     
  6. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    после этого предлагаешь искать нотисы?
     
  7. Klin

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

    С нами с:
    15 май 2008
    Сообщения:
    82
    Симпатии:
    0
    ничего не выдает, уже в самом скрипте ставил
    error_reporting (E_ALL);
    и
    error_reporting (E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

    Ноль реакции
     
  8. Klin

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

    С нами с:
    15 май 2008
    Сообщения:
    82
    Симпатии:
    0
    теперь ясно.
     
  9. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Luge
    Хм, не думал что empty() не вызывает нотис.
     
  10. Klin

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

    С нами с:
    15 май 2008
    Сообщения:
    82
    Симпатии:
    0
    специально проверил Не инициализированную переменную var_dump() выдал Notice и NULL огромное спасибо за понятное объяснение)
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я тоже когда-то с трудом сжился с мыслью, что переменная может быть пустой, а может содержать ничего/Мусор =)