Есть ли разница между isset
и !empty
. Если я делаю эту двойную булеву проверку, это правильно или избыточно? и есть ли более короткий способ сделать то же самое?
isset($vars[1]) AND !empty($vars[1])
Есть ли разница между isset
и !empty
. Если я делаю эту двойную булеву проверку, это правильно или избыточно? и есть ли более короткий способ сделать то же самое?
isset($vars[1]) AND !empty($vars[1])
Ответы:
Это полностью избыточно. empty
более или менее сокращенно !isset($foo) || !$foo
, и !empty
аналогично isset($foo) && $foo
. Т.е. empty
происходит обратное действие isset
плюс дополнительная проверка на достоверность значения.
Или, другими словами, empty
то же самое !$foo
, но не выдает предупреждения, если переменная не существует. Это основной смысл этой функции: проводить логическое сравнение, не беспокоясь об установленной переменной.
В руководстве это выглядит так:
empty()
является противоположностью(boolean) var
, за исключением того, что предупреждение не генерируется, когда переменная не установлена.
Вы можете просто использовать !empty($vars[1])
здесь.
$vars[1]
он получит уведомление.
empty
- одна из самых неправильно понимаемых функций в PHP. Крошечный фрагмент о том, что «предупреждение не генерируется», очень легко пропустить. Мне пришлось несколько раз отсканировать документацию, чтобы найти ее здесь.
empty($vars[1])
не вызывает никаких предупреждений, даже $vars[1]
не установлен, но echo $vars[1]
будет. Я проверил факт с помощью echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
.
0
что false
. PHP не единственный. Все еще не уверен, что ваша жалоба.
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";
}
?>
Принятый ответ не верен.
isset () НЕ эквивалентно! empty ().
Если вы пойдете по этому пути, вы создадите несколько неприятных и трудных для отладки ошибок. например, попробуйте запустить этот код:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
isset
это эквивалентно !empty
.
$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';
}
Пустой, просто проверьте, является ли указанная переменная / массив имеет значение, если вы проверите 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)
while isset проверяет, является ли переменная isset, а не ноль, что также можно найти в php doc (isset)
Это не обязательно.
Предупреждение не генерируется, если переменная не существует. Это означает, что empty () по сути является кратким эквивалентом! Isset ($ var) || $ var == false.
isset($vars[1]) AND !empty($vars[1])
эквивалентно !empty($vars[1])
.
Я подготовил простой код, чтобы показать его опытным путем.
Последняя строка является неопределенной переменной.
+-----------+---------+---------+----------+---------------------+
| Var value | empty() | isset() | !empty() | isset() && !empty() |
+-----------+---------+---------+----------+---------------------+
| '' | true | true | false | false |
| ' ' | false | true | true | true |
| false | true | true | false | false |
| true | false | true | true | true |
| array () | true | true | false | false |
| NULL | true | false | false | false |
| '0' | true | true | false | false |
| 0 | true | true | false | false |
| 0.0 | true | true | false | false |
| undefined | true | false | false | false |
+-----------+---------+---------+----------+---------------------+
И код
$var1 = "";
$var2 = " ";
$var3 = FALSE;
$var4 = TRUE;
$var5 = array();
$var6 = null;
$var7 = "0";
$var8 = 0;
$var9 = 0.0;
function compare($var)
{
print(var_export($var, true) . "|" .
var_export(empty($var), true) . "|" .
var_export(isset($var), true) . "|" .
var_export(!empty($var), true) . "|" .
var_export(isset($var) && !empty($var), true) . "\n");
}
for ($i = 1; $i <= 9; $i++) {
$var = 'var' . $i;
compare($$var);
}
@print(var_export($var10, true) . "|" .
var_export(empty($var10), true) . "|" .
var_export(isset($var10), true) . "|" .
var_export(!empty($var10), true) . "|" .
var_export(isset($var10) && !empty($var10), true) . "\n");
Неопределенная переменная должна оцениваться вне функции, поскольку сама функция создает временную переменную в самой области видимости.
«Пусто»: работает только с переменными. Пустой может означать разные вещи для разных типов переменных (см. Руководство: http://php.net/manual/en/function.empty.php ).
«isset»: проверяет, существует ли переменная, и проверяет истинное NULL или ложное значение. Может быть сброшен, вызвав «unset». Еще раз проверьте руководство.
Использование любого из них зависит от типа используемой переменной.
Я бы сказал, что безопаснее проверять оба, потому что вы проверяете в первую очередь, существует ли переменная, и не является ли она действительно NULL или пустой.
если мы используем ту же страницу, чтобы добавить / изменить через кнопку отправки, как показано ниже
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
тогда мы не должны использовать
isset($_POST['edit_id'])
bcoz edit_id
устанавливается постоянно, будь то страница добавления или редактирования, вместо этого мы должны использовать условие проверки ниже
!empty($_POST['edit_id'])
empty()
функцию:Возвращает FALSE
if var
имеет непустое и ненулевое значение.
Это хорошо знать. Другими словами, все от NULL
, до 0
«» вернется TRUE
при использовании empty()
функции.
isset()
возвращает функция:Возвращает, TRUE
если var
существует; FALSE
в противном случае.
Другими словами, только переменные, которые не существуют (или переменные со строго NULL
значениями), будут возвращаться FALSE
в isset()
функцию. Все переменные, которые имеют любой тип значения, будь то 0
пустая текстовая строка и т. Д., Будут возвращены TRUE
.