Где я должен использовать isset () и! Empty () - PullRequest
82 голосов
/ 02 августа 2009

Я где-то читал, что функция isset() обрабатывает пустую строку как TRUE, поэтому isset() не является эффективным способом проверки ввода текста и текстовых полей из формы HTML.

Таким образом, вы можете использовать empty(), чтобы проверить, что пользователь что-то набрал.

  1. Правда ли, что функция isset() обрабатывает пустую строку как TRUE?

  2. Тогда в каких ситуациях мне следует использовать isset()? Должен ли я всегда использовать !empty(), чтобы проверить, есть ли что-то?

Например, вместо

if(isset($_GET['gender']))...

Использование этого

if(!empty($_GET['gender']))...

Ответы [ 14 ]

99 голосов
/ 02 августа 2009

isset vs.! Empty

FTA:

"isset () проверяет, имеет ли переменная значение включая (False, 0 или пусто строка), но не NULL. Возвращает ИСТИНА если var существует; ЛОЖЬ в противном случае.

С другой стороны, функция empty () проверяет, является ли переменная пустой значение пустая строка, 0, NULL или Ложь. Возвращает FALSE, если переменная имеет непустое и ненулевое значение. "

27 голосов
/ 02 августа 2009

В общем смысле:

  • isset проверяет, существует ли переменная (или элемент массива, или свойство объекта) (и не ноль)
  • empty проверяет, содержит ли переменная (...) непустые данные.


Ответить на вопрос 1 :

$str = '';
var_dump(isset($str));

дает

boolean true

Поскольку переменная $str существует.


И вопрос 2 :

Вы должны использовать isset, чтобы определить, существует ли переменная ; например, если вы получаете некоторые данные в виде массива, вам может потребоваться проверить, установлен ли ключ в этом массиве.
Подумайте, например, о $_GET / $_POST.

Теперь, чтобы работать над его значением, когда вы знаете, что есть такое значение: это задача empty.

11 голосов
/ 22 апреля 2012

Ни один из хороших способов проверить правильность ввода.

  • isset() недостаточно, поскольку, как уже отмечалось, допустимым значением считается пустая строка.
  • ! empty() также недостаточно, поскольку он отклоняет '0', что может быть допустимым значением.

Использование isset() в сочетании с проверкой на равенство пустой строки - это минимум, необходимый для проверки того, что входящий параметр имеет значение без создания ложных отрицаний:

if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
  ...
}

Но под "минимумом" я имею в виду именно это. Весь приведенный выше код определяет, есть ли какое-либо значение для $_GET['gender']. не определяет, является ли значение $_GET['gender'] действительным (например, одно из ("Male", "Female","FileNotFound")).

Об этом см. Ответ Джоша Дэвиса .

11 голосов
/ 02 августа 2009

isset предназначен для использования только для переменных, а не только для значений, поэтому isset("foobar") вызовет ошибку. Начиная с PHP 5.5, empty поддерживает как переменные, так и выражения.

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

$var = "";
var_dump(isset($var));

Таблицы сравнения типов в руководстве по PHP довольно удобны для таких вопросов.

isset в основном проверяет, имеет ли переменная любое значение, отличное от null , поскольку несуществующие переменные всегда имеют значение null empty является разновидностью счетчика для isset, но также обрабатывает целочисленное значение 0 и строковое значение "0" как пустые. (Опять же, взгляните на таблицы сравнения типов .)

4 голосов
/ 26 января 2013

Если у вас есть $ _POST ['param'] и вы предполагаете, что это строковый тип, тогда

isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'

идентично

!empty($_POST['param'])
3 голосов
/ 03 августа 2009

isset () не является эффективным способом проверки ввода текста и текстовых полей из HTML-формы

Вы можете переписать это, поскольку "isset () не является способом проверки ввода." Чтобы проверить ввод, используйте расширение фильтра PHP . filter_has_var() скажет вам, существует ли переменная, тогда как filter_input() фактически отфильтрует и / или очистит входные данные.

Обратите внимание, что вам не нужно использовать filter_has_var() до filter_input(), и если вы запрашиваете переменную, которая не установлена, filter_input() просто вернет null.

2 голосов
/ 14 мая 2017

Когда и как использовать:

  1. Исеть ()

True для 0, 1, пустая строка, строка, содержащая значение, true, false

Ложь для нуля

например,

$status = 0
if (isset($status)) // True
$status = null 
if (isset($status)) // False
  1. Empty

False для 1, строка, содержащая значение, true

True для нулевой, пустой строки, 0, false * 1027 например *

$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False
2 голосов
/ 13 июня 2014

isset используется, чтобы определить, существует ли экземпляр чего-либо, то есть, если экземпляр был создан ... он не связан со значением параметра ...

Паскаль МАРТИН ... +1 ...

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

1 голос
/ 02 августа 2009
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)
1 голос
/ 02 августа 2009

Использование empty достаточно:

if(!empty($variable)){
    // Do stuff
}

Кроме того, если вам нужно целочисленное значение, возможно, стоит проверить, что intval($variable) !== FALSE.

...