Зачем проверять isset () и! Empty () - PullRequest
247 голосов
/ 30 декабря 2010

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

isset($vars[1]) AND !empty($vars[1])

Ответы [ 9 ]

391 голосов
/ 30 декабря 2010

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

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

В руководстве это выглядит так:

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

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

30 голосов
/ 30 декабря 2010

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";
}
?>
13 голосов
/ 18 июля 2016

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

isset () равно НЕ эквивалентно! Empty ().

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

<?php

$s = '';

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

?>

https://3v4l.org/J4nBb

8 голосов
/ 30 декабря 2010
$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';
}
3 голосов
/ 30 декабря 2010

Пусто, просто проверьте, является ли указанная переменная / массив значением, если вы проверите php doc (empty) , вы увидите, что эти вещи считаются 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, а не null, что также можно найти в php doc (isset)

0 голосов
/ 08 июня 2018
  • С веб-сайта PHP, ссылаясь на функцию empty():

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

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

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

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

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

0 голосов
/ 22 мая 2015

Нет необходимости.

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

php.net

0 голосов
/ 30 декабря 2010

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

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

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

isset($_POST['edit_id'])

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

!empty($_POST['edit_id'])
0 голосов
/ 30 декабря 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...