Зачем проверять как isset(), так и!пустой()
Есть ли разница между isset
и !empty
. Если я выполню эту двойную логическую проверку, это правильно или избыточно? и есть ли более короткий способ сделать то же самое?
isset($vars[1]) AND !empty($vars[1])
9 answers
Это совершенно излишне. empty
более или менее сокращенно обозначает !isset($foo) || !$foo
, а !empty
аналогично isset($foo) && $foo
. Т.е. empty
выполняет обратную функцию isset
плюс дополнительную проверку истинности значения.
Или, другими словами, empty
совпадает с !$foo
, но не выдает предупреждений, если переменная не существует. В этом суть этой функции: выполните логическое сравнение, не беспокоясь о том, что переменная установлена.
Руководство формулирует это так:
empty()
является противоположностью(boolean) var
, за исключением того, что предупреждение не генерируется, если переменная не установлена.
Вы можете просто использовать !empty($vars[1])
здесь.
isset()
проверяет, установлена ли переменная, а не равна нулю:
Http://us.php.net/manual/en/function.isset.php
empty()
может возвращать значение true, если переменной присвоены определенные значения:
Http://us.php.net/manual/en/function.empty.php
Чтобы продемонстрировать это, попробуйте следующий код с $the_var неназначенным, равным 0 и равным 1.
<?php
#$the_var = 0;
if (isset($the_var)) {
echo "set";
} else {
echo "not set";
}
echo "\n";
if (empty($the_var)) {
echo "empty";
} else {
echo "not empty";
}
?>
Принятый ответ неверен.
Isset() НЕ эквивалентно !пустой().
Если вы пойдете по этому пути, вы создадите несколько довольно неприятных и трудных для отладки ошибок. например, попробуйте запустить этот код:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
$a = 0;
if (isset($a)) { //$a is set because it has some value ,eg:0
echo '$a has value';
}
if (!empty($a)) { //$a is empty because it has value 0
echo '$a is not empty';
} else {
echo '$a is empty';
}
Пусто просто проверьте, имеет ли указанная переменная/массив значение, если вы проверите php doc(пустой), вы увидите, что эти вещи считаются emtpy
* "" (an empty string) * 0 (0 as an integer) * "0" (0 as a string) * NULL * FALSE * array() (an empty array) * var $var; (a variable declared, but without a value in a class)
В то время как isset проверяет, является ли переменная isset, а не null, которую также можно найти в php doc(isset)
"Пустой": работает только с переменными. Пустой может означать разные вещи для разных типов переменных (проверьте руководство: http://php.net/manual/en/function.empty.php).
"isset": проверяет, существует ли переменная, и проверяет наличие истинного нулевого или ложного значения. Может быть сброшен, вызвав "сбросить". Еще раз проверьте руководство.
Использование любого из них зависит от типа используемой переменной.
Я бы сказал, что безопаснее проверять и то, и другое, потому что вы проверяете в первую очередь все, если переменная существует, и если она на самом деле не является нулевой или пустой.
Если мы используем ту же страницу для добавления/редактирования с помощью кнопки отправки, как показано ниже
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
Тогда мы не должны использовать
isset($_POST['edit_id'])
Bcoz edit_id
устанавливается все время, будь то добавление или редактирование страницы, вместо этого мы должны использовать проверку ниже условия
!empty($_POST['edit_id'])
В этом нет необходимости.
Предупреждение не генерируется, если переменная не существует. Это означает , что пустой(), по сути, является кратким эквивалентом !isset($var)||$var ==ложь.
- С веб-сайта PHP, ссылающегося на функцию
empty()
:
Возвращает FALSE
, если var
имеет непустое и ненулевое значение.
Это хорошо знать. Другими словами, все, начиная с NULL
, до 0
и заканчивая "", вернет TRUE
при использовании функции empty()
.
- Вот описание того, что возвращает функция
isset()
:
Возвращает TRUE
, если var
существует; FALSE
в противном случае.
Другими словами, только переменные, которые не существует (или переменные со строгими значениями NULL
) вернут FALSE
в функции isset()
. Все переменные, которые имеют значение любого типа, будь то 0
, пустая текстовая строка и т.д. вернется TRUE
.