Есть ли разница между isset
и !empty
. Если я делаю эту двойную логическую проверку, правильно ли это или избыточно? и есть ли более короткий способ сделать то же самое?Зачем устанавливать и isset() и! Empty()
isset($vars[1]) AND !empty($vars[1])
Есть ли разница между isset
и !empty
. Если я делаю эту двойную логическую проверку, правильно ли это или избыточно? и есть ли более короткий способ сделать то же самое?Зачем устанавливать и isset() и! Empty()
isset($vars[1]) AND !empty($vars[1])
Это полностью избыточно. empty
более или менее сокращенно для !isset($foo) || !$foo
и !empty
аналогичен isset($foo) && $foo
. То есть empty
делает обратную вещь isset
плюс дополнительная проверка для правдивость значения.
Или, другими словами, empty
- это то же самое, что и !$foo
, но не вызывает предупреждения, если переменная не существует. В этом суть этой функции: выполнить логическое сравнение, не беспокоясь о заданной переменной.
The manual ставит его так:
empty()
противоположна(boolean) var
, за исключением того, что никакого предупреждения не генерируется, когда переменная не установлена.
Здесь вы можете просто использовать !empty($vars[1])
.
isset()
проверяет, является ли переменная задана и не пуста:
http://us.php.net/manual/en/function.isset.php
empty()
может возвращать верно, когда переменная устанавливается в определенных значениях:
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";
}
?>
Пустые просто проверить это refered переменного/массив имеет значение, если вы установите флажок php doc(empty) вы увидите это вещи считаются пусты
* "" (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 и не нулевой, которая также может быть найдена в php doc(isset)
«Пустой»: работает только с переменными. Пустые могут означать разные вещи для разных переменных типов (чековая инструкция: http://php.net/manual/en/function.empty.php).
«isset»: проверяет, существует ли переменная и проверяет истинное значение NULL или false. Может быть отменено путем вызова «unset». Еще раз проверьте руководство.
Использование любого из них зависит от типа переменной, которую вы используете.
Я бы сказал, что это безопаснее проверять для обоих, потому что вы проверяете прежде всего, существует ли переменная, и если она не является действительно NULL или пустым.
$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';
}
Но вы не обрабатывали переменный не установленный случай. –
если мы будем использовать ту же страницу, чтобы добавлять/редактировать с помощью кнопки отправки, как показано ниже
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
тогда мы не должны использовать
isset($_POST['edit_id'])
bcoz edit_id
устанавливается все время является ли она добавьте или отредактируйте страницу, вместо этого мы должны использовать проверку ниже условия
!empty($_POST['edit_id'])
предыдущее сообщение было отправлено bcoz i press enter по ошибке, вот мой полный ответ ... почему downvote? :( – diEcho
Не нужно.
Предупреждение не генерируется, если переменная не существует. Это означает, что empty() по существу является кратким эквивалентом! Isset ($ var) || $ var == false.
Принятый ответ не является правильным.
isset() is NOT эквивалент! Пусто().
Вы будете создавать некоторые довольно неприятные и трудно отлаживающие ошибки, если вы спуститесь по этому маршруту. например попробуйте запустить этот код:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
как об этом
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';
}
Demo: http://sandbox.onlinephpfunctions.com/code/7131f142742f0765c2619841bb9abfa598bcf066
Существует хороший график по результатам их использования с различными типами переменных (у них есть различия): https://www.virendrachandak.com/demos/php-isset-vs-empty-vs-is_null.php –
Очевидными точными дополнениями являются set и is_null, но! empty охватывает несколько разных. Все зависит от типа данных, которые вы тестируете. –