2010-12-30 3 views
210

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

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

Существует хороший график по результатам их использования с различными типами переменных (у них есть различия): https://www.virendrachandak.com/demos/php-isset-vs-empty-vs-is_null.php –

+0

Очевидными точными дополнениями являются set и is_null, но! empty охватывает несколько разных. Все зависит от типа данных, которые вы тестируете. –

ответ

333

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

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

The manual ставит его так:

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

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

+3

Но тогда, если нет '$ vars [1]', он получит уведомление. – karim79

+48

@karim Нет, он не будет. В этом-то и дело. – deceze

+3

Я понятия не имею, откуда у меня эта идея. Плюс один. – karim79

26

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"; 
} 
?> 
4

Пустые просто проверить это 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)

0

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

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

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

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

+3

Не нужно проверять оба. – deceze

+1

@szahn «безопаснее проверять для обоих», - вы, как программист, можете проверить все, что хотите для безопасности. Но если ваш код избыточен, тогда вы можете быть избыточным как программист. – madlopt

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

Но вы не обрабатывали переменный не установленный случай. –

1

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

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

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

isset($_POST['edit_id']) 

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

!empty($_POST['edit_id']) 
+0

предыдущее сообщение было отправлено bcoz i press enter по ошибке, вот мой полный ответ ... почему downvote? :( – diEcho

0

Не нужно.

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

php.net

+2

Это никогда не было необходимым для любой версии PHP, поскольку пустая уже проверяет (not) isset. Вы путаете тот факт, что пустой теперь поддерживает выражения с вопросом. – Think

+0

Это правда. – madlopt

8

Принятый ответ не является правильным.

isset() is NOT эквивалент! Пусто().

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

<?php 

$s = ''; 

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

?> 

https://3v4l.org/J4nBb

0

как об этом

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

Смежные вопросы