Зачем проверять как isset(), так и!пустой()


Есть ли разница между isset и !empty. Если я выполню эту двойную логическую проверку, это правильно или избыточно? и есть ли более короткий способ сделать то же самое?

isset($vars[1]) AND !empty($vars[1])
 232
php
Author: Dan Lugg, 2010-12-30

9 answers

Это совершенно излишне. empty более или менее сокращенно обозначает !isset($foo) || !$foo, а !empty аналогично isset($foo) && $foo. Т.е. empty выполняет обратную функцию isset плюс дополнительную проверку истинности значения.

Или, другими словами, empty совпадает с !$foo, но не выдает предупреждений, если переменная не существует. В этом суть этой функции: выполните логическое сравнение, не беспокоясь о том, что переменная установлена.

Руководство формулирует это так:

empty() является противоположностью (boolean) var, за исключением того, что предупреждение не генерируется, если переменная не установлена.

Вы можете просто использовать !empty($vars[1]) здесь.

 367
Author: deceze, 2011-01-01 02:11:46

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";
}
?>
 28
Author: GreenMatt, 2013-05-20 22:35:42

Принятый ответ неверен.

Isset() НЕ эквивалентно !пустой().

Если вы пойдете по этому пути, вы создадите несколько довольно неприятных и трудных для отладки ошибок. например, попробуйте запустить этот код:

<?php

$s = '';

print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";

?>

Https://3v4l.org/J4nBb

 12
Author: Snowcrash, 2016-07-18 11:38:54
$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';
}
 8
Author: rajmohan, 2013-12-29 03:37:59

Пусто просто проверьте, имеет ли указанная переменная/массив значение, если вы проверите 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)

 3
Author: Breezer, 2010-12-30 04:12:29

"Пустой": работает только с переменными. Пустой может означать разные вещи для разных типов переменных (проверьте руководство: http://php.net/manual/en/function.empty.php).

"isset": проверяет, существует ли переменная, и проверяет наличие истинного нулевого или ложного значения. Может быть сброшен, вызвав "сбросить". Еще раз проверьте руководство.

Использование любого из них зависит от типа используемой переменной.

Я бы сказал, что безопаснее проверять и то, и другое, потому что вы проверяете в первую очередь все, если переменная существует, и если она на самом деле не является нулевой или пустой.

 0
Author: szahn, 2010-12-30 04:18:11

Если мы используем ту же страницу для добавления/редактирования с помощью кнопки отправки, как показано ниже

<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">

Тогда мы не должны использовать

isset($_POST['edit_id'])

Bcoz edit_id устанавливается все время, будь то добавление или редактирование страницы, вместо этого мы должны использовать проверку ниже условия

!empty($_POST['edit_id'])
 0
Author: diEcho, 2010-12-30 07:12:59

В этом нет необходимости.

Предупреждение не генерируется, если переменная не существует. Это означает , что пустой(), по сути, является кратким эквивалентом !isset($var)||$var ==ложь.

Php.net

 0
Author: madlopt, 2016-01-04 08:50:30
  • С веб-сайта PHP, ссылающегося на функцию empty():

Возвращает FALSE, если var имеет непустое и ненулевое значение.

Это хорошо знать. Другими словами, все, начиная с NULL, до 0 и заканчивая "", вернет TRUE при использовании функции empty().

  • Вот описание того, что возвращает функция isset():

Возвращает TRUE, если var существует; FALSE в противном случае.

Другими словами, только переменные, которые не существует (или переменные со строгими значениями NULL) вернут FALSE в функции isset(). Все переменные, которые имеют значение любого типа, будь то 0, пустая текстовая строка и т.д. вернется TRUE.

 0
Author: Ende, 2018-06-08 08:00:00