Есть ли разница между issetи !empty. Если я делаю эту двойную булеву проверку, это правильно или избыточно? и есть ли более короткий способ сделать то же самое?
Очевидными точными дополнениями являются isset и is_null, но! Empty охватывает несколько разных. Все зависит от типа данных, которые вы проверяете.
Джефф Клэйтон
Ответы:
420
Это полностью избыточно. emptyболее или менее сокращенно !isset($foo) || !$foo, и !emptyаналогично isset($foo) && $foo. Т.е. emptyпроисходит обратное действие issetплюс дополнительная проверка на достоверность значения.
Или, другими словами, emptyто же самое !$foo, но не выдает предупреждения, если переменная не существует. Это основной смысл этой функции: проводить логическое сравнение, не беспокоясь об установленной переменной.
Но тогда, если нет, $vars[1]он получит уведомление.
karim79
6
Я понятия не имею, откуда я взял эту идею. Плюс один
karim79
8
@karim IMO empty- одна из самых неправильно понимаемых функций в PHP. Крошечный фрагмент о том, что «предупреждение не генерируется», очень легко пропустить. Мне пришлось несколько раз отсканировать документацию, чтобы найти ее здесь.
deceze
2
empty($vars[1])не вызывает никаких предупреждений, даже $vars[1]не установлен, но echo $vars[1]будет. Я проверил факт с помощью echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;.
Амил Вадувавара
4
@Shahor Многие языки считают, 0что false. PHP не единственный. Все еще не уверен, что ваша жалоба.
deceze
33
isset() проверяет, установлена ли переменная, а не ноль:
Принятый ответ никоим образом не предполагает, что issetэто эквивалентно !empty.
deceze
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';}
Но вы не обработали переменную, а не установили регистр.
Амил Вадувавара
3
Пустой, просто проверьте, является ли указанная переменная / массив имеет значение, если вы проверите php doc (пусто), вы увидите, что эти вещи считаются emtpy.
*""(an empty string)*0(0as an integer)*"0"(0as a string)* NULL
* FALSE
* array()(an empty array)*var $var;(a variable declared, but without a valuein a class)
while isset проверяет, является ли переменная isset, а не ноль, что также можно найти в php doc (isset)
Предупреждение не генерируется, если переменная не существует. Это означает, что empty () по сути является кратким эквивалентом! Isset ($ var) || $ var == false.
Это никогда не было необходимо ни в одной версии PHP, так как empty уже проверяет (не) isset. Вы путаете тот факт, что empty теперь поддерживает выражения с вопросом.
alxgb
Это правда, пять лет спустя.
Леннон
2
isset($vars[1]) AND !empty($vars[1])эквивалентно !empty($vars[1]).
Я подготовил простой код, чтобы показать его опытным путем.
Последняя строка является неопределенной переменной.
«isset»: проверяет, существует ли переменная, и проверяет истинное NULL или ложное значение. Может быть сброшен, вызвав «unset». Еще раз проверьте руководство.
Использование любого из них зависит от типа используемой переменной.
Я бы сказал, что безопаснее проверять оба, потому что вы проверяете в первую очередь, существует ли переменная, и не является ли она действительно NULL или пустой.
@szahn «безопаснее проверять и то и другое», - вы, как программист, можете проверить все, что вы хотите, для безопасности. Но если ваш код избыточен, вы можете быть избыточным как программист.
Madlopt
0
если мы используем ту же страницу, чтобы добавить / изменить через кнопку отправки, как показано ниже
Другими словами, только переменные, которые не существуют (или переменные со строго NULLзначениями), будут возвращаться FALSEв isset()функцию. Все переменные, которые имеют любой тип значения, будь то 0пустая текстовая строка и т. Д., Будут возвращены TRUE.
Ответы:
Это полностью избыточно.
empty
более или менее сокращенно!isset($foo) || !$foo
, и!empty
аналогичноisset($foo) && $foo
. Т.е.empty
происходит обратное действиеisset
плюс дополнительная проверка на достоверность значения.Или, другими словами,
empty
то же самое!$foo
, но не выдает предупреждения, если переменная не существует. Это основной смысл этой функции: проводить логическое сравнение, не беспокоясь об установленной переменной.В руководстве это выглядит так:
Вы можете просто использовать
!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.
источник
Принятый ответ не верен.
isset () НЕ эквивалентно! empty ().
Если вы пойдете по этому пути, вы создадите несколько неприятных и трудных для отладки ошибок. например, попробуйте запустить этот код:
https://3v4l.org/J4nBb
источник
isset
это эквивалентно!empty
.источник
Пустой, просто проверьте, является ли указанная переменная / массив имеет значение, если вы проверите php doc (пусто), вы увидите, что эти вещи считаются emtpy.
while isset проверяет, является ли переменная isset, а не ноль, что также можно найти в php doc (isset)
источник
Это не обязательно.
php.net
источник
isset($vars[1]) AND !empty($vars[1])
эквивалентно!empty($vars[1])
.Я подготовил простой код, чтобы показать его опытным путем.
Последняя строка является неопределенной переменной.
И код
Неопределенная переменная должна оцениваться вне функции, поскольку сама функция создает временную переменную в самой области видимости.
источник
«Пусто»: работает только с переменными. Пустой может означать разные вещи для разных типов переменных (см. Руководство: http://php.net/manual/en/function.empty.php ).
«isset»: проверяет, существует ли переменная, и проверяет истинное NULL или ложное значение. Может быть сброшен, вызвав «unset». Еще раз проверьте руководство.
Использование любого из них зависит от типа используемой переменной.
Я бы сказал, что безопаснее проверять оба, потому что вы проверяете в первую очередь, существует ли переменная, и не является ли она действительно NULL или пустой.
источник
если мы используем ту же страницу, чтобы добавить / изменить через кнопку отправки, как показано ниже
тогда мы не должны использовать
bcoz
edit_id
устанавливается постоянно, будь то страница добавления или редактирования, вместо этого мы должны использовать условие проверки нижеисточник
empty()
функцию:Возвращает
FALSE
ifvar
имеет непустое и ненулевое значение.Это хорошо знать. Другими словами, все от
NULL
, до0
«» вернетсяTRUE
при использованииempty()
функции.isset()
возвращает функция:Возвращает,
TRUE
еслиvar
существует;FALSE
в противном случае.Другими словами, только переменные, которые не существуют (или переменные со строго
NULL
значениями), будут возвращатьсяFALSE
вisset()
функцию. Все переменные, которые имеют любой тип значения, будь то0
пустая текстовая строка и т. Д., Будут возвращеныTRUE
.источник