За последние 24 часа нас посетили 8746 программистов и 474 робота. Сейчас ищут 88 программистов ...

Можно ли заменить isset на empty

Тема в разделе "Прочие вопросы по PHP", создана пользователем ruRikki, 28 июн 2015.

  1. ruRikki

    ruRikki Новичок

    С нами с:
    17 май 2015
    Сообщения:
    38
    Симпатии:
    0
    Доброго времени суток, уважаемые форумчане!

    можно ли заменить isset на empty
    пример
    Код (PHP):
    1. public function RikkiTxt($RIA) {
    2. [b]if (!empty($RIA['simple'])) {[/b]
    3.         echo "<input type='text' id='id".$RIA['inputName']."' name='".$RIA['inputName']."' class='".$RIA['inputClass']."' value='".(!empty($RIA['value']) ? $RIA['value'] : "")."' ".(!empty($RIA['maxlength']) ? "maxlength='".$RIA['maxlength']."'" : "")." ".(!empty($RIA['placeholder']) ? "placeholder='".$RIA['placeholder']."'" : "")." ".(!empty($RIA['js']) ? $RIA['js'] : "")." ".(!empty($RIA['readonly']) ? "readonly" : "").">".PHP_EOL;
    4. [b]} elseif (!empty($RIA['simpleInGr'])) {[/b]
    5.         echo "<div id='idDi".$RIA['inputName']."' class='input-group'>".PHP_EOL;
    6.         echo "<span class='input-group-addon'>".(!empty($RIA['spanTitle']) ? $RIA['spanTitle'] : "")."</span>".PHP_EOL;
    7.         echo "<input type='text' id='id".$RIA['inputName']."' name='".$RIA['inputName']."' class='".$RIA['inputClass']."' value='".(!empty($RIA['value']) ? $RIA['value'] : "")."' ".(!empty($RIA['maxlength']) ? "maxlength='".$RIA['maxlength']."'" : "")." ".(!empty($RIA['placeholder']) ? "placeholder='".$RIA['placeholder']."'" : "")." ".(!empty($RIA['js']) ? $RIA['js'] : "")." ".(!empty($RIA['readonly']) ? "readonly" : "").">".PHP_EOL;
    8.         echo "</div>".PHP_EOL;
    9. [b]} elseif (!empty($RIA['countInGr'])) {[/b]
    10.         echo "<div id='idDi".$RIA['inputName']."' class='input-group'>".PHP_EOL;
    11.         echo "<span class='input-group-addon'>".(!empty($RIA['spanTitle']) ? $RIA['spanTitle'] : "")."<span id='idSp".$RIA['inputName']."' class='".$RIA['countSpanClass']."'>".($RIA['maxlength']-2)."</span></span>".PHP_EOL;
    12.         echo "<input type='text' id='id".$RIA['inputName']."' name='".$RIA['inputName']."' class='".$RIA['inputClass']."' value='".(!empty($RIA['value']) ? $RIA['value'] : "")."' ".(!empty($RIA['maxlength']) ? "maxlength='".$RIA['maxlength']."'" : "")." ".(!empty($RIA['placeholder']) ? "placeholder='".$RIA['placeholder']."'" : "")." ".(!empty($RIA['js']) ? $RIA['js'] : "")." ".(!empty($RIA['readonly']) ? "readonly" : "").">".PHP_EOL;
    13.         echo "</div>".PHP_EOL; 
    14.     [b]  }    [/b]
    15.   }
    16.  
    17. код на странице отображения
    18.  
    19.         $wcSSum = array(
    20. [b]'simpleInGr' => 1,[/b] 
    21. 'inputName' => 'wcSSum', 
    22. 'spanTitle' => '', 
    23. 'inputClass' => 'form-control text-center', 
    24. 'value' => '888', 
    25. 'maxlength' => 5, 
    26. 'placeholder' => '', 
    27. 'js' => '', 
    28. 'readonly' => ''
    29. );
    30.         echo $RikkiInput->RikkiInput($wcSSum);  
    [​IMG]
    ошибки по поводу неизвестной переменной не выдает
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.636
    Симпатии:
    424
    Адрес:
    РД, г. Махачкала.
  3. ruRikki

    ruRikki Новичок

    С нами с:
    17 май 2015
    Сообщения:
    38
    Симпатии:
    0
    Если empty проверяет переменную которая не объявлена она ошибки не выдает, и на выходе верный результат, вот и задаю вопрос, можно ли в данном случае ограничиться одной empty или все таки связка isset+empty, где то слышала что zend усовершенствовал empty, но это только слухи
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.636
    Симпатии:
    424
    Адрес:
    РД, г. Махачкала.
    а вот нельзя проверять не объявленную переменную
    Код (PHP):
    1. if(isset($varable){
    2.     if(empty($varable){
    3.         //это значит переменная пуста
    4.     }else{
    5.         //это значит переменная не пуста
    6. }else{
    7.     //переменной не существует
    8. } 
    Добавлено спустя 31 секунду:
    Добавлено спустя 22 секунды:
    я ссылки прикрепил чтобы вы почитали про эти функции.

    Добавлено спустя 1 минуту 12 секунд:
    Если переменная не существует, предупреждение не генерируется. Это значит, что empty() фактически является точным эквивалентом конструкции !isset($var) || $var == false
     
  5. ruRikki

    ruRikki Новичок

    С нами с:
    17 май 2015
    Сообщения:
    38
    Симпатии:
    0
    спасибо, я информацию по вашим ссылкам, уже раз 30 прочитала
    те переменная, в случае проверки empty, хотя бы просто так $var; но должна существовать, а совсем пустое место нет? правильно ? А что страшного в том что empty встретит необъявленную переменную?
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.636
    Симпатии:
    424
    Адрес:
    РД, г. Махачкала.
    если вы предусмотрите этот момент ничего страшного.
     
  7. ruRikki

    ruRikki Новичок

    С нами с:
    17 май 2015
    Сообщения:
    38
    Симпатии:
    0
    а если не предусмотрю?)
     
  8. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.636
    Симпатии:
    424
    Адрес:
    РД, г. Махачкала.
    учтите когда испльзуете только empty() Этот момент !isset($var) || $var == false
    и все.
     
  9. ruRikki

    ruRikki Новичок

    С нами с:
    17 май 2015
    Сообщения:
    38
    Симпатии:
    0
    спасибо, но
    не учитывает ситуацию когда переменная не объявлена вовсе)
     
  10. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.636
    Симпатии:
    424
    Адрес:
    РД, г. Махачкала.
    тогда используйте их в паре, чтобы точно знать, объявлена переменная или же нет.

    Добавлено спустя 1 минуту 12 секунд:
    она учитывает, но там переменная или false или же ее нет. Короче, точно мы знаем что из двух.
     
  11. ruRikki

    ruRikki Новичок

    С нами с:
    17 май 2015
    Сообщения:
    38
    Симпатии:
    0
    )))
    судя по логике если переменная есть, то рассматривается следующее условие если она = false, то есть если переменной нет то функция может ее обработать без тяжелых последствий и ошибок? это же не !isset($var) && $var == false простите за глупость конечно
    а это где в мануале прописано?

    или это не точный эквивалент который нам чего-то не договаривает, откуда он вообще в мануалах взялся? для красоты слова?
     
  12. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.636
    Симпатии:
    424
    Адрес:
    РД, г. Махачкала.
    Код (PHP):
    1. $a = "";
    2. if(empty($a){
    3.    //переменная пустая
    4. }else{
    5. //переменная не пустая
    6. }
    тут сработает первое условие, потому что переменная пустая.


    Код (PHP):
    1. if(empty($b){
    2.    //переменная не объявлена или равна false
    3. }else{
    4. //переменная не пустая
    5. }
    тут тоже сработает первое условие, но тут потому что переменная не объявлена
     
  13. ruRikki

    ruRikki Новичок

    С нами с:
    17 май 2015
    Сообщения:
    38
    Симпатии:
    0
    mahmuzar, да, и что в итоге то можно сказать... заключение какое ? огласите диагноз
     
  14. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.636
    Симпатии:
    424
    Адрес:
    РД, г. Махачкала.
    ну если точно надо знать объявлена была ли переменная или нет, то в связке с Isset иначе можно его так юзать. Короче когда как
     
  15. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.031
    Симпатии:
    84
    Адрес:
    Мещёра, Центр, Болото N3
    mahmuzar, Вы не совсем правы
    isset вернёт FALSE, если переменная не объявлена или равна NULL.
    empty это просто эквивалент "!isset($var) or $var == false".
    Код (PHP):
    1. $varIS = null;
    2. $varEmpty = '';
    3. var_dump(isset($var), isset($varIS), empty($var), empty($varIS), empty($varEmpty));
     
  16. ruRikki

    ruRikki Новичок

    С нами с:
    17 май 2015
    Сообщения:
    38
    Симпатии:
    0
    спасибо, все таки там где нужна скорость обработки лучше оставить isset (проверка форм и тд), а при формировании html кода со стороны сервера можно ограничиться empty?
     
  17. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.031
    Симпатии:
    84
    Адрес:
    Мещёра, Центр, Болото N3
    Не так. Используйте empty() там, где нужна проверка, что переменная существует и она не пустая.
    isset() там, где требуется проверка, что переменная существует и не равна null.

    А скоростя нужны только в длительных циклах, в остальных случаях не заморачивайтесь сильно, пока не припрёт.

    п.с.
    Кстати, если нужна проверка именно на объявление переменной, то почитайте про get_defined_vars() - может помочь.
     
  18. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.636
    Симпатии:
    424
    Адрес:
    РД, г. Махачкала.
    там изменения в скорости незначительны думаю из-за этого не стоит что-либо менять.
    Так абсолютно с вами согласен. Вроде по isset другого не писал.
     
  19. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.031
    Симпатии:
    84
    Адрес:
    Мещёра, Центр, Болото N3
    Просто недописали:
    Я уточнил.
     
  20. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.449
    Симпатии:
    581
    В коде ТС, empty() даже логичнее, чем иссет. Раз на то пошло, то для проверки существования ключей в массиве есть отдельная функция.
     
  21. ruRikki

    ruRikki Новичок

    С нами с:
    17 май 2015
    Сообщения:
    38
    Симпатии:
    0
    спасибо, буду использовать связку i+e, в моем случае, я немного не правильно сформулировала вопрос, надобыло можно ли из связки isset + empty удалить isset.... ну да ладно

    Добавлено спустя 1 минуту 56 секунд:
    [vs],
    и чтобы значения при этом были не пустые?

    в итоге код такой получился:
    public function RikkiTxt($RIA) {
    if (isset($RIA['pTxt']) && !empty($RIA['pTxt'])) echo "<p".(isset($RIA['pClass']) && !empty($RIA['pClass']) ? " class='".$RIA['pClass']."'" : "").">".$RIA['pTxt']."</p>".PHP_EOL;
    if (isset($RIA['simpleInGr'])) {
    echo "<div id='idDi".$RIA['inputName']."' class='input-group'>".PHP_EOL;
    echo "<span class='input-group-addon'>".(isset($RIA['spanTitle']) && !empty($RIA['spanTitle']) ? $RIA['spanTitle'] : "")."</span>".PHP_EOL;
    } elseif (isset($RIA['countInGr'])) {
    echo "<div id='idDi".$RIA['inputName']."' class='input-group'>".PHP_EOL;
    echo "<span class='input-group-addon'>".(isset($RIA['spanTitle']) && !empty($RIA['spanTitle']) ? $RIA['spanTitle'] : "")."<span id='idSp".$RIA['inputName']."' class='".$RIA['countSpanClass']."'>".($RIA['maxlength']-2)."</span></span>".PHP_EOL;
    }
    echo "<input type='text' id='id".$RIA['inputName']."' name='".$RIA['inputName']."' class='".$RIA['inputClass']."' value='".(isset($RIA['value']) ? $RIA['value'] : "")."'".(isset($RIA['maxlength']) && !empty($RIA['maxlength']) ? " maxlength='".$RIA['maxlength']."'" : "").(isset($RIA['placeholder']) && !empty($RIA['placeholder']) ? " placeholder='".$RIA['placeholder']."'" : "").(isset($RIA['js']) && !empty($RIA['js']) ? " ".$RIA['js'] : "").(isset($RIA['readonly']) && !empty($RIA['readonly']) ? " readonly" : "").">".PHP_EOL;
    if (isset($RIA['simpleInGr']) || isset($RIA['countInGr'])) echo "</div>".PHP_EOL;
    }
    если бы конечно убрать isset то смотрелось бы получше(

    девушка, (если вы девушка) вам самой нравится видеть эту кучу вместо кода?! дувушки обычно склонны к порядку и чистоте.
         — модераторъ

         
     
  22. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.031
    Симпатии:
    84
    Адрес:
    Мещёра, Центр, Болото N3
    "issset() and !empty()"
    Вообще-то это называется "индуский код" ;)
    Но ... хозяин - барин.
     
  23. ruRikki

    ruRikki Новичок

    С нами с:
    17 май 2015
    Сообщения:
    38
    Симпатии:
    0
    а что предлагаете? если isset выкинуть нельзя
    мне нужно проверять на пустоту, так как на страницах отображения я использую весь массив для скорости составления, чтобы не вспоминать как там каждый ключ называется
    $RIA_on_id3 = array(
    'simpleInGr' => '1',
    'pTxt' => '',
    'pClass' => '',
    'inputName' => 'on_id3',
    'spanTitle' => $locale['a5'],
    'inputClass' => 'form-control text-center',
    'value' => $value_on_id3,
    'maxlength' => '5',
    'placeholder' => '',
    'js' => '',
    'readonly' => '1'
    );
    echo $RikkiInput->RikkiTxt($RIA_on_id3);

    память девичья)
    //Все так завернуто выражаются, как будто боятся что его советом воспользуются тысячи жаждущих истины пользователей И что спустя некоторое время разъяренная толпа будет разыскивать советчика чтобы посмотреть ему в глаза(

    если доверять интуиции и теории то isset в моем случае абсолютно лишняя, а как на практике...
     
  24. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    10.310
    Симпатии:
    1.027
    Адрес:
    там-сям
    будьте проще: выберите для себя любимый вариант и пользуйтесь им, т.к. в большинстве случаев разницы нет. а там, где разница есть — применяйте другой способ. главное чтобы вы помнили в чем разница.

    ваш капитан очевидность.
     
  25. ruRikki

    ruRikki Новичок

    С нами с:
    17 май 2015
    Сообщения:
    38
    Симпатии:
    0
    artoodetoo, в моем случае (формирование html кода со стороны сервера) isset+empty и просто empty разница есть или нет?