Я где-то читал, что функция isset()
состоит в том, что пустая строка проверяется как TRUE
, поскольку isset()
не является эффективным способом проверки текстовых входов и текстовых полей из HTML-формы.
Таким образом, вы можете использовать empty()
чтобы проверить, что пользователь что-то набрал.
Верно ли, что функция isset()
обрабатывает пустую строку как TRUE
?
Тогда в какой ситуации я должен использовать isset()
? Должен ли я всегда использовать !empty()
чтобы проверить, есть ли что-то?
Например, вместо
if(isset($_GET['gender']))...
Используя это
if(!empty($_GET['gender']))...
Исеть против!
FTA:
«isset () проверяет, имеет ли переменная значение (False, 0 или пустую строку), но не NULL. Возвращает TRUE, если существует var, FALSE в противном случае.
С другой стороны, функция empty () проверяет, имеет ли пустая строка пустая строка, 0, NULL или False. Возвращает FALSE, если var имеет непустое и ненулевое значение. "
В наиболее общем виде:
isset
тесты, если существует переменная (или элемент массива или свойство объекта) (и не является нулевым) empty
тесты, если переменная (…) содержит некоторые непустые данные. Чтобы ответить на вопрос 1 :
$str = ''; var_dump(isset($str));
дает
boolean true
Потому что переменная $str
существует.
И вопрос 2 :
Вы должны использовать isset, чтобы определить, существует ли переменная; например, если вы получаете некоторые данные в виде массива, вам может потребоваться проверить, есть ли в этом массиве ключ isset.
Например, подумайте о $_GET
/ $_POST
.
Теперь, чтобы работать над его значением, когда вы знаете, что существует такое значение: это задание empty
.
isset
предназначен для использования только для переменных, а не только значений, поэтому isset("foobar")
вызовет ошибку. Начиная с PHP 5.5, empty
поддерживает как переменные, так и выражения.
Поэтому ваш первый вопрос должен быть скорее, если isset
возвращает true для переменной, которая содержит пустую строку. И ответ:
$var = ""; var_dump(isset($var));
Таблицы сравнения типов в руководстве по PHP весьма удобны для таких вопросов.
isset
основном проверяет, имеет ли переменная какое-либо значение, отличное от нуля, поскольку несуществующие переменные всегда имеют значение null . empty
– это вид счетной части isset
но также обрабатывает целочисленное значение 0
и строковое значение "0"
как пустое. (Опять же, взгляните на таблицы сравнения типов .)
Также нет хорошего способа проверить правильность ввода.
isset()
недостаточно, потому что, как уже отмечалось, он считает допустимым значение пустой строки. ! empty()
! empty()
недостаточно, потому что он отклоняет «0», что может быть допустимым значением. Использование isset()
сочетании с проверкой равенства с пустой строкой является минимальным минимумом, необходимо проверить, что входящий параметр имеет значение без создания ложных негативов:
if( isset($_GET['gender']) and ($_GET['gender'] != '') ) { ... }
Но «голый минимум», я имею в виду именно это. Весь приведенный выше код определяет, существует ли какое-то значение для $_GET['gender']
. Он не определяет, действительно ли значение для $_GET['gender']
(например, один из ("Male", "Female",
"FileNotFound"
)
).
Для этого см . Ответ Джоша Дэвиса .
Использование empty
достаточно:
if(!empty($variable)){ // Do stuff }
Кроме того, если вы хотите получить целочисленное значение, также стоит проверить, что intval($variable) !== FALSE
.
isset () не является эффективным способом проверки текстовых входов и текстовых полей из HTML-формы
Вы можете переписать это как «isset () не способ проверки ввода». Чтобы проверить ввод, используйте расширение фильтра PHP. filter_has_var()
сообщит вам, существует ли переменная, а filter_input()
будет фактически фильтровать и / или дезинфицировать входные данные.
Обратите внимание, что вам не нужно использовать filter_has_var()
до filter_input()
и если вы попросите переменную, которая не установлена, filter_input()
просто вернет null
.
Если у вас есть $ _POST ['param'] и предположим, что это строковый тип, тогда
isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'
идентична
!empty($_POST['param'])
isset($variable) === (@$variable !== null) empty($variable) === (@$variable == false)
isset используется, чтобы определить, существует ли экземпляр чего-либо, который есть, если была создана экземпляр переменной … это не касается значения параметра …
Паскаль МАРТИН … +1 …
empty () не генерирует предупреждение, если переменная не существует … поэтому isset () предпочтительнее при тестировании существования переменной, когда вы собираетесь ее модифицировать …
Когда и как использовать:
True для 0, 1, пустая строка, строка, содержащая значение, true, false
False для null
например
$status = 0 if (isset($status)) // True $status = null if (isset($status)) // False
False для 1, строка, содержащая значение, true
True для нулевой, пустой строки, 0, false, например,
$status = 0 if(empty($status)) // true $status = 1 if(empty($status)) // False
Я использую следующее, чтобы избежать уведомлений, это проверяет, декларируется ли var в GET или POST, и с префиксом @ вы можете безопасно проверить, не является ли пустым, и избегать уведомления, если var не установлен:
if( isset($_GET['var']) && @$_GET['var']!='' ){ //Is not empty, do something }