Где я должен использовать isset() и! Empty()
Я где-то читал, что функция isset()
обрабатывает пустую строку как TRUE
, поэтому isset()
не является эффективным способом проверки ввода текста и текстовых полей из HTML-формы.
Таким образом, вы можете использовать empty()
чтобы проверить, что пользователь что-то набрал.
-
Правда ли, что функция isset()
обрабатывает пустую строку как TRUE
?
-
Тогда в каких ситуациях я должен использовать isset()
? Должен ли я всегда использовать !empty()
чтобы проверить, есть ли что-то?
Например, вместо
if(isset($_GET['gender']))...
Используя это
if(!empty($_GET['gender']))...
Ответы
Ответ 1
Исеть против! Пусто
FTA:
"isset() проверяет, имеет ли переменная значение, включающее (False, 0 или пустую строку), но не NULL. Возвращает TRUE, если var существует; FALSE в противном случае.
С другой стороны, функция empty() проверяет, имеет ли переменная пустое значение, пустую строку, 0, NULL или False. Возвращает FALSE, если var имеет непустое и ненулевое значение. "
Ответ 2
В наиболее общем виде:
-
isset
проверяет, существует ли переменная (или элемент массива или свойство объекта) (и не является нулевым)
-
empty
проверяет, содержит ли переменная (...) некоторые непустые данные.
Чтобы ответить на вопрос 1:
$str = '';
var_dump(isset($str));
дает
boolean true
Поскольку существует переменная $str
.
И вопрос 2:
Вы должны использовать isset, чтобы определить, существует ли переменная ; например, если вы получаете некоторые данные в виде массива, вам может потребоваться проверить, есть ли в этом массиве ключ isset.
Например, подумайте о $_GET
/$_POST
.
Теперь, чтобы работать над его значением, когда вы знаете, что есть такое значение: это задание empty
.
Ответ 3
isset
предназначен для использования только для переменных, а не только для значений, поэтому isset("foobar")
вызовет ошибку. Начиная с PHP 5.5, empty
поддерживает как переменные, так и выражения.
Итак, ваш первый вопрос должен быть, если isset
возвращает true для переменной, содержащей пустую строку. И ответ:
$var = "";
var_dump(isset($var));
таблицы сравнения типов в руководстве по PHP весьма полезны для таких вопросов.
isset
в основном проверяет, имеет ли переменная какое-либо значение, отличное от нуля, поскольку несуществующие переменные всегда имеют значение null. empty
является видом счетной части isset
, но также обрабатывает целочисленное значение 0
и строковое значение "0"
как пустое. (Опять же, взгляните на таблицы сравнения .)
Ответ 4
Ни один из них не является хорошим способом проверки правильности ввода.
-
isset()
недостаточно, потому что, как уже отмечалось, он считает допустимым значение пустой строки.
-
! empty()
недостаточно, потому что он отклоняет "0", что может быть допустимым значением.
Использование isset()
в сочетании с проверкой равенства с пустой строкой является минимальным минимумом, который необходимо проверить, чтобы входящий параметр имел значение без создания ложных негативов:
if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
...
}
Но по "минимальному минимуму" я имею в виду именно это. Все приведенные выше коды определяют, существует ли какое-то значение для $_GET['gender']
. Он не определяет, действительно ли значение для $_GET['gender']
(например, один из ("Male", "Female",
"FileNotFound"
)
).
Для этого см. ответ Джоша Дэвиса.
Ответ 5
Если у вас есть $_POST ['param'] и предположим, что это строковый тип, то
isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'
совпадает с
!empty($_POST['param'])
Ответ 6
isset() не является эффективным способом проверки текстовых входов и текстовых полей из HTML-формы
Вы можете переписать это как "isset() не способ проверки ввода". Чтобы проверить ввод, используйте PHP расширение фильтра. filter_has_var()
сообщит вам, существует ли переменная, а filter_input()
будет фактически фильтровать и/или дезинфицировать вход.
Обратите внимание, что вам не нужно использовать filter_has_var()
до filter_input()
, и если вы запрашиваете переменную, которая не установлена, filter_input()
просто вернет null
.
Ответ 7
isset используется для определения того, существует ли экземпляр какого-либо объекта, который есть, если была создана экземпляр переменной... это не касается значения параметра...
Паскаль МАРТИН... +1
...
empty() не генерирует предупреждение, если переменная не существует... поэтому isset() является предпочтительным при тестировании существования переменной, когда вы собираетесь ее модифицировать...
Ответ 8
Когда и как использовать:
True для 0, 1, пустая строка, строка, содержащая значение, true, false
False для null
e.g
$status = 0
if (isset($status)) // True
$status = null
if (isset($status)) // False
- Empty
False для 1, строка, содержащая значение, true
True для нулевой, пустой строки, 0, false
например
$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False
Ответ 9
Использование empty
достаточно:
if(!empty($variable)){
// Do stuff
}
Кроме того, если вы хотите получить целочисленное значение, также стоит проверить, что intval($variable) !== FALSE
.
Ответ 10
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)
Ответ 11
Я использую следующее, чтобы избежать уведомлений, это проверяет, декларируется ли var в GET или POST и с префиксом @вы можете безопасно проверить, не является ли пустым, и избежать уведомления, если var не установлен:
if( isset($_GET['var']) && @$_GET['var']!='' ){
//Is not empty, do something
}
Ответ 12
isset() используется для проверки, установлена ли переменная со значением или нет, а Empty() используется для проверки, является ли данная переменная пустой или нет.
isset() возвращает true, если переменная не равна нулю, тогда как Empty() возвращает true, если переменная является пустой строкой.
Ответ 13
$var = '';
// Evaluates to true because $var is empty
if ( empty($var) ) {
echo '$var is either 0, empty, or not set at all';
}
// Evaluates as true because $var is set
if ( isset($var) ) {
echo '$var is set even though it is empty';
}
Источник: Php.net
Ответ 14
isset() проверяет, установлена ли переменная, а не ноль:
http://us.php.net/manual/en/function.isset.php
empty() может вернуть true, если для переменной заданы определенные значения:
http://us.php.net/manual/en/function.empty.php
<?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";
}
?>