Достаточно ли empty () или использовать isset ()?
Примечание - Я знаю довольно много о пустая() и isset (), что Я спрашиваю, Это самый правильный / эффективный способ их использования.
Я просто видел на php.net эту фразу под empty() ссылки:
предупреждение не генерируется, если переменная не существует. Те средства пустая() по существу является кратким эквивалентом !использования isset($VAR) как || $ВАР == ложные.
но опять же, поскольку я в основном работаю сейчас над приложениями других людей (автономными проектами, веб-сайтами с использованием cms или даже фреймворков), я много раз видел, как люди пишут:
if (isset ($var) && $var != '')
// or
if (isset ($var) && !empty($var))
(в основном с переменными $_GET и $_POST, но не только)
насколько я понимаю руководство, фрагмент ниже эквивалентен:
if (!empty($var))
или я что-то пропустила? Что технически лучший способ проверить существования переменной со значением?
Я знаю, что обе функции, их назначения. Я просто хочу знать, если empty() все необходимое для проверки если переменная set и данное значение. Я знаю, что это работает, но это 100% правильно и безопасно?
6 ответов
Op коды, созданные из isset($var) && !empty($var)
line     #  *  op                           fetch           ext  return  operands
---------------------------------------------------------------------------------
   3     0  >   EXT_STMT                                                 
         1      ISSET_ISEMPTY_VAR                      12800000    ~0       !0
         2  >   JMPZ_EX                                      ~0    ~0,     ->6
         3  >   ISSET_ISEMPTY_VAR                      11800000    ~1       !0
         4      BOOL_NOT                                     ~2    ~1
         5      BOOL                                         ~0    ~2
         6  >   FREE                                               ~0
   4     7  >   RETURN                                              1
и !empty($var)
line     #  *  op                           fetch           ext  return  operands
---------------------------------------------------------------------------------
   3     0  >   EXT_STMT                                                 
         1      ISSET_ISEMPTY_VAR                      11800000    ~0       !0
         2      BOOL_NOT                                           ~1       ~0
         3      FREE                                                        ~1
   4     4  >   RETURN                                                       1
так что да, это повторяется ISSET_ISEMPTY_VAR но !$empty. Это зависит от переданного значения, но оно не существует, верхний путь-один код операции меньше BOOL_NOT. но если он существует, то нижний путь быстрее.
хотя вряд ли это будет узким местом в любом приложении
empty достаточно, но остерегайтесь его последствий.
если $var один из 0, '0', false, '', [], null (и, возможно, несколько других я забыл), тогда это будет считаться isset конечно, но это тоже будет empty. Обратите внимание, что строка '0' это особый gotcha.
лично я использую только isset. Если значение должно быть не -empty, затем я проверю это отдельно и выброшу ошибку (который пойман подходящими блоками обработки ошибок), чтобы дать пользователю простую, точную ошибку "это значение требуется".
isset просто скажет вам, установлена ли переменная, независимо от значения (null, false и т. д.).
Если вы хотите проверить, что значение не является пустой строкой, null, false или 0 используйте empty.
Если вы используете !(пустой ($var) тогда переменная установлена и содержит значение, которое может быть пустым, как "" или null или 0.
if(!empty($_COOKIE['dev'])) echo 'developer mode';
если файл cookie есть, пустой или заполненный любым значением, условие истинно. Иначе он будет проигнорирован.
это полезно, если вы работаете с массивами и не знаете, установлен ли ключ, чтобы избежать предупреждений.
когда вы оцениваете $_POST и $_GET, разница между isset и isempty полезна. Как вы сказали, not empty () var означает, что isset и значение были отправлены.
Так
if (!empty($var))
достаточно ceratinly для
if (isset ($var) && $var != '')
чего вам не хватает, так это иногда
if (isset($var)) {
  if ($var != '') {
  } else {
    ... do "A"
  }
} else {
  ... do something different from "A"
}
вам может понадобиться это. И если это происходит часто, когда это не произойдет, вы просто объедините два условия if и забудете о empty(). Как вы уже поняли. Я думаю что использование только "пустого" может быть быстрее, но внутренне, вероятно, он делает те же проверки.
переменные GET/POST/COOKIE должны быть проверены с помощью filter_input
