Достаточно ли 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