Есть ли разница между issetи !empty. Если я делаю эту двойную булеву проверку, это правильно или избыточно? и есть ли более короткий способ сделать то же самое?
isset($vars[1]) AND !empty($vars[1])
Есть ли разница между issetи !empty. Если я делаю эту двойную булеву проверку, это правильно или избыточно? и есть ли более короткий способ сделать то же самое?
isset($vars[1]) AND !empty($vars[1])
Ответы:
Это полностью избыточно. emptyболее или менее сокращенно !isset($foo) || !$foo, и !emptyаналогично isset($foo) && $foo. Т.е. emptyпроисходит обратное действие issetплюс дополнительная проверка на достоверность значения.
Или, другими словами, emptyто же самое !$foo, но не выдает предупреждения, если переменная не существует. Это основной смысл этой функции: проводить логическое сравнение, не беспокоясь об установленной переменной.
В руководстве это выглядит так:
empty()является противоположностью(boolean) var, за исключением того, что предупреждение не генерируется, когда переменная не установлена.
Вы можете просто использовать !empty($vars[1])здесь.
$vars[1]он получит уведомление.
empty- одна из самых неправильно понимаемых функций в PHP. Крошечный фрагмент о том, что «предупреждение не генерируется», очень легко пропустить. Мне пришлось несколько раз отсканировать документацию, чтобы найти ее здесь.
empty($vars[1])не вызывает никаких предупреждений, даже $vars[1]не установлен, но echo $vars[1]будет. Я проверил факт с помощью echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;.
0что false. PHP не единственный. Все еще не уверен, что ваша жалоба.
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 () НЕ эквивалентно! empty ().
Если вы пойдете по этому пути, вы создадите несколько неприятных и трудных для отладки ошибок. например, попробуйте запустить этот код:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
issetэто эквивалентно !empty.
$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)
while isset проверяет, является ли переменная isset, а не ноль, что также можно найти в php doc (isset)
Это не обязательно.
Предупреждение не генерируется, если переменная не существует. Это означает, что empty () по сути является кратким эквивалентом! Isset ($ var) || $ var == false.
isset($vars[1]) AND !empty($vars[1])эквивалентно !empty($vars[1]).
Я подготовил простой код, чтобы показать его опытным путем.
Последняя строка является неопределенной переменной.
+-----------+---------+---------+----------+---------------------+
| Var value | empty() | isset() | !empty() | isset() && !empty() |
+-----------+---------+---------+----------+---------------------+
| '' | true | true | false | false |
| ' ' | false | true | true | true |
| false | true | true | false | false |
| true | false | true | true | true |
| array () | true | true | false | false |
| NULL | true | false | false | false |
| '0' | true | true | false | false |
| 0 | true | true | false | false |
| 0.0 | true | true | false | false |
| undefined | true | false | false | false |
+-----------+---------+---------+----------+---------------------+
И код
$var1 = "";
$var2 = " ";
$var3 = FALSE;
$var4 = TRUE;
$var5 = array();
$var6 = null;
$var7 = "0";
$var8 = 0;
$var9 = 0.0;
function compare($var)
{
print(var_export($var, true) . "|" .
var_export(empty($var), true) . "|" .
var_export(isset($var), true) . "|" .
var_export(!empty($var), true) . "|" .
var_export(isset($var) && !empty($var), true) . "\n");
}
for ($i = 1; $i <= 9; $i++) {
$var = 'var' . $i;
compare($$var);
}
@print(var_export($var10, true) . "|" .
var_export(empty($var10), true) . "|" .
var_export(isset($var10), true) . "|" .
var_export(!empty($var10), true) . "|" .
var_export(isset($var10) && !empty($var10), true) . "\n");
Неопределенная переменная должна оцениваться вне функции, поскольку сама функция создает временную переменную в самой области видимости.
«Пусто»: работает только с переменными. Пустой может означать разные вещи для разных типов переменных (см. Руководство: http://php.net/manual/en/function.empty.php ).
«isset»: проверяет, существует ли переменная, и проверяет истинное NULL или ложное значение. Может быть сброшен, вызвав «unset». Еще раз проверьте руководство.
Использование любого из них зависит от типа используемой переменной.
Я бы сказал, что безопаснее проверять оба, потому что вы проверяете в первую очередь, существует ли переменная, и не является ли она действительно NULL или пустой.
если мы используем ту же страницу, чтобы добавить / изменить через кнопку отправки, как показано ниже
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
тогда мы не должны использовать
isset($_POST['edit_id'])
bcoz edit_idустанавливается постоянно, будь то страница добавления или редактирования, вместо этого мы должны использовать условие проверки ниже
!empty($_POST['edit_id'])
empty()функцию:Возвращает FALSEif varимеет непустое и ненулевое значение.
Это хорошо знать. Другими словами, все от NULL, до 0«» вернется TRUEпри использовании empty()функции.
isset()возвращает функция:Возвращает, TRUEесли varсуществует; FALSEв противном случае.
Другими словами, только переменные, которые не существуют (или переменные со строго NULLзначениями), будут возвращаться FALSEв isset()функцию. Все переменные, которые имеют любой тип значения, будь то 0пустая текстовая строка и т. Д., Будут возвращены TRUE.