Где я должен использовать isset() и! Empty()

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

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

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

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

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

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

Используя это

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

20 ответов

Решение

Исеть против! Пусто

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, чтобы определить, существует ли переменная; например, если вы получаете некоторые данные в виде массива, вам может потребоваться проверить, установлен ли ключ в этом массиве.
Подумать о $_GET / $_POST, например.

Теперь, чтобы работать над своей ценностью, когда вы знаете, что есть такая ценность: это работа empty,

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

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

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

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

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

Для этого смотрите ответ Джоша Дэвиса.

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

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

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

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

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

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

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

идентично

!empty($_POST['param'])

Isset () против пустого () против is_null()

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

  1. Исеть ()

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

Ложь для нуля

например

$status = 0
if (isset($status)) // True
$status = null 
if (isset($status)) // False
  1. пустой

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

Истина для нуля, пустая строка, 0, ложь, например

$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False

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

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

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

isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)

isset() используется для проверки, установлена ​​ли переменная со значением или нет, а Empty() используется для проверки, является ли данная переменная пустой или нет.

isset() возвращает true, если переменная не равна нулю, тогда как Empty() возвращает true, если переменная является пустой строкой.

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

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

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

Я пришел сюда в поисках быстрого способа проверить, есть ли в переменной какое-либо содержимое. Ни один из ответов здесь не дал полного решения, поэтому вот оно:


Достаточно проверить, является ли ввод '' или 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

Я использую следующую проверку, чтобы также отфильтровать строки, содержащие только пробелы и разрывы строк:

function hasContent($var){
    return trim($var .'') !== '';
}

С помощью empty достаточно:

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

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

Я использую следующее, чтобы избежать уведомлений, это проверяет, объявлена ​​ли переменная, объявленная в GET или POST, и с префиксом @ вы можете безопасно проверить, не является ли она пустой, и избежать уведомления, если переменная не установлена:

if( isset($_GET['var']) && @$_GET['var']!='' ){
    //Is not empty, do something
}

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

      if(empty($yourVal)) {
  echo "YES empty - $yourVal"; // no result
}
if(!empty($yourVal)) {
  echo "<P>NOT !empty- $yourVal"; // result
}
if(isset($yourVal)) {
  echo "<P>YES isset - $yourVal";  // found yourVal, but result can still be none - yourVal is set without value
}
if(!isset($yourVal)) {
  echo "<P>NO !isset - $yourVal"; // $yourVal is not set, therefore no result
}
// 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

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";
}
?>

!empty сделает свое дело. если вам нужно только проверить, существуют ли данные или нет, используйте isset, другой пустой может обрабатывать другие проверки

<?php
$array = [ "name_new" => "print me"];

if (!empty($array['name'])){
   echo $array['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array2 = [ "name" => NULL];

if (!empty($array2['name'])){
   echo $array2['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array3 = [ "name" => ""];

if (!empty($array3['name'])){
   echo $array3['name'];
}

//output : {nothing}  

////////////////////////////////////////////////////////////////////

$array4 = [1,2];

if (!empty($array4['name'])){
   echo $array4['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array5 = [];

if (!empty($array5['name'])){
   echo $array5['name'];
}

//output : {nothing}

?>

Учтите, что поведение может измениться в разных версиях PHP.

Из документации

isset () Возвращает TRUE, если var существует и имеет любое значение, кроме NULL. ЛОЖЬ, иначе https://www.php.net/manual/en/function.isset.php

empty () не существует или его значение равно FALSE https://www.php.net/manual/en/function.empty.php

(empty ($ x) == (! isset ($x) ||!$x)) // возвращает истину;

(!empty($x) == (isset($x) && $ x)) // возвращает истину;

Следующее использование двух конструкций PHP поможет вам выбрать наиболее подходящую для вашего случая.

Короткий рассказ

проверяет, установлена/определена ли переменная, и если да, то проверяет ее на наличиеnull,false, "", 0.

просто проверяет, установлено ли оно, это может быть что угодно

Длинная история

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

С другой стороны,emptyне только проверяет, установлена ​​ли переменная, но также проверяет, содержит ли она значение, которое считается «пустым», напримерnull, пустая строка'',false, или0.

Другие вопросы по тегам