Зачем проверять и isset() и! Empty()

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

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

Ответ 1

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

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

В руководстве указано следующее:

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

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

Ответ 2

isset() проверяет, установлена ​​ли переменная, а не null:

http://us.php.net/manual/en/function.isset.php

empty() может возвращать значение true, если для переменной заданы определенные значения:

http://us.php.net/manual/en/function.empty.php

Чтобы продемонстрировать это, попробуйте следующий код: $a_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";
}
?>

Ответ 3

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

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

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

<?php

$s = '';

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

?>

https://3v4l.org/J4nBb

Ответ 4

$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';
}

Ответ 5

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

в то время как isset проверяет, есть ли переменная isset и не null, которая также может быть найдена в php doc (isset)

Ответ 6

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

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

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

isset($_POST['edit_id'])

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

!empty($_POST['edit_id'])

Ответ 7

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

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

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

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

Ответ 8

Это не обязательно.

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

php.net

Ответ 9

как насчет этого

function IsEmpty($myVar){
    if(isset($myVar) && (!empty($myVar) OR $myVar === 0 OR $myVar === false )  ){
       return false;
    } else{
      return true;
    }
}

$myVar = 0;   // Set and Not Empty
$myVar = true;   // Set and Not Empty
$myVar = false; // Set and Not Empty
$myVar = '';   // Either Not Set or Empty
$myVar = 'abc';  // Set and Not Empty

if(!IsEmpty($myVar)){
    echo 'Set and Not Empty';
} else{
    echo 'Either Not Set or Empty';
}

Демо: http://sandbox.onlinephpfunctions.com/code/7131f142742f0765c2619841bb9abfa598bcf066

Ответ 10

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

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

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

  • Ниже приведено описание функции isset():

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

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