Я где-то читал, что isset()
функция обрабатывает пустую строку как TRUE
, следовательно isset()
, не является эффективным способом проверки ввода текста и текстовых полей из HTML-формы.
Таким образом, вы можете использовать, empty()
чтобы проверить, что пользователь что-то напечатал.
Верно ли, что
isset()
функция обрабатывает пустую строку какTRUE
?Тогда в каких ситуациях мне следует использовать
isset()
? Всегда ли использовать,!empty()
чтобы проверить, есть ли что-нибудь?
Например вместо
if(isset($_GET['gender']))...
Используя это
if(!empty($_GET['gender']))...
Ответы:
isset vs.! empty
FTA:
источник
empty()
также возвращает истину для пустого массива.empty()
для 0 возвращается значение ИСТИНА, не рекомендуется использовать этот оператор для математических расчетов, если «0» случайно окажется строкой. Это может быть опасно. Вместо этого следует использовать основной>
,<
а==
операторы и преобразования переменных с использованиемintval()
илиfloatval()
.В самом общем виде:
isset
проверяет , является ли переменная (или элемент массива или свойство объекта) существует (и не равно нулю)empty
проверяет, содержит ли переменная (...) непустые данные.Чтобы ответить на вопрос 1 :
дает
Потому что переменная
$str
существует.И вопрос 2 :
Вы должны использовать isset, чтобы определить, существует ли переменная ; например, если вы получаете данные в виде массива, вам может потребоваться проверить, установлен ли ключ в этом массиве.
Подумайте , например, о
$_GET
/$_POST
.Теперь, чтобы работать над его ценностью, когда вы знаете, что такая ценность существует: это работа
empty
.источник
Также нельзя проверить правильность ввода.
isset()
недостаточно, потому что, как уже отмечалось, он считает пустую строку допустимым значением.! empty()
также не достаточно, потому что он отклоняет «0», которое может быть допустимым значением.Использование в
isset()
сочетании с проверкой равенства для пустой строки - это минимум, который вам нужно для проверки того, что входящий параметр имеет значение, не создавая ложноотрицательных значений:Но под «абсолютным минимумом» я имею в виду именно это. Весь приведенный выше код определяет, есть ли какое-то значение для
$_GET['gender']
. Она не определяет , является ли значение для$_GET['gender']
является действительным (например, один из("Male", "Female",
"FileNotFound"
)
).Для этого см . Ответ Джоша Дэвиса .
источник
isset
предназначен для использования только для переменных, а не только для значений, поэтомуisset("foobar")
вызовет ошибку. Начиная с PHP 5.5,empty
поддерживаются как переменные, так и выражения.Итак, ваш первый вопрос должен быть скорее, если
isset
возвращает true для переменной, содержащей пустую строку. И ответ такой:В таблицах сравнения типов в руководстве РНР очень удобно для таких вопросов.
isset
в основном проверяет, имеет ли переменная какое-либо значение, кроме null, поскольку несуществующие переменные всегда имеют значение null .empty
является своего рода противоположностью,isset
но также обрабатывает целочисленное значение0
и строковое значение"0"
как пустые. (Опять же, взгляните на таблицы сравнения типов .)источник
empty()
с PHP 5.5.0 также «поддерживает выражения, а не только переменные».Если у вас есть $ _POST ['param'] и вы предполагаете, что это строковый тип, тогда
идентичен
источник
Вы можете переписать это как «isset () не является способом проверки ввода». Для проверки ввода используйте расширение фильтра PHP .
filter_has_var()
сообщит вам, существует ли переменная, а наfilter_input()
самом деле будет фильтровать и / или дезинфицировать ввод.Обратите внимание, что вам не нужно использовать
filter_has_var()
до,filter_input()
и если вы запросите переменную, которая не установлена,filter_input()
просто вернетсяnull
.источник
Когда и как использовать:
Истина для 0, 1, пустая строка, строка, содержащая значение, истина, ложь
Ложь для нуля
например
Ложь для 1, строка, содержащая значение, true
Истина для нуля, пустая строка, 0, ложь, например
источник
isset используется, чтобы определить, существует ли экземпляр чего-либо, то есть, если переменная была создана ... это не связано со значением параметра ...
Паскаль МАРТИН ... +1 ...
empty () не генерирует предупреждения, если переменная не существует ... поэтому isset () предпочтительнее при проверке существования переменной, когда вы собираетесь ее изменить ...
источник
Использование
empty
достаточно:Кроме того, если вам нужно целочисленное значение, возможно, стоит проверить это
intval($variable) !== FALSE
.источник
empty
...isset
/filter_has_var
должен использоваться для проверки существования var.источник
Я пришел сюда в поисках быстрого способа проверить, есть ли в переменной какое-либо содержимое. Ни один из ответов здесь не дал полного решения, поэтому вот оно:
Достаточно проверить, является ли вход
''
илиnull
, потому что:Запросить URL
.../test.php?var=
результаты в$_GET['var'] = ''
Запросить URL
.../test.php
результаты в$_GET['var'] = null
isset()
возвращаетсяfalse
только тогда, когда переменная существует и не установленаnull
, поэтому, если вы используете ее, вы получитеtrue
пустые строки (''
).empty()
рассматривает какnull
и''
пустой, но он также считает'0'
пустым, что является проблемой в некоторых случаях применения.Если вы хотите рассматривать
'0'
как пустой, используйтеempty()
. В противном случае используйте следующую проверку:$var .'' !== ''
оцениваетсяfalse
только для следующих входных данных:''
null
false
Я использую следующую проверку, чтобы также отфильтровать строки, содержащие только пробелы и разрывы строк:
источник
Я использую следующее, чтобы избежать уведомлений, это проверяет, объявлен ли var в GET или POST, и с префиксом @ вы можете безопасно проверить, не является ли он пустым, и избежать уведомления, если var не установлен:
источник
@
) не следует поощрять, и он не является обязательным для вашего фрагмента. Это плохой ответ. Вы делаете вольное сравнение. Вы также можете использовать!empty()
.@
доставит вам проблемы с отладкой, влияние страницы будет медленнее, и вы все равно можете иметьerror_log
более 1 ГБ за один момент. Просто будь умным и пользуйся!empty()
,!is_null()
или что-то в этом роде.isset () используется для проверки, установлена ли переменная со значением или нет, а Empty () используется для проверки, является ли данная переменная пустой или нет.
isset () возвращает истину, если переменная не равна нулю, тогда как Empty () возвращает истину, если переменная является пустой строкой.
источник
Источник: Php.net
источник
isset () проверяет, установлена ли переменная, а не null:
http://us.php.net/manual/en/function.isset.php
empty () может возвращать истину, если для переменной заданы определенные значения:
http://us.php.net/manual/en/function.empty.php
источник
isset () против пустого () против is_null ()
источник
! empty сделает свое дело. если вам нужно только проверить, существуют ли данные или нет, используйте isset, другой пустой может обрабатывать другие проверки
?>
источник