Isset() и empty() - что использовать

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

Проверьте - установлена эта переменная или нет? Если он установлен - я проверяю - он пустой или нет?

<?php
    $var = '23';
    if (isset($var)&&!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

И у меня есть вопрос - я должен использовать isset() перед empty() - это нужно? ТИА!

Ответ 1

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

Empty проверяет, установлена ли переменная и проверяет ли она на ноль, "", 0 и т.д.

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

При empty следующие вещи считаются пустыми:

  • "" (пустая строка)
  • 0 (0 как целое число)
  • 0.0 (0 как число с плавающей запятой)
  • "0" (0 в виде строки)
  • НОЛЬ
  • ЛОЖНЫЙ
  • array() (пустой массив)
  • var $ var; (объявленная переменная, но без значения в классе)

От http://php.net/manual/en/function.empty.php


Как уже упоминалось в комментариях, отсутствие предупреждения также важно с empty()

Руководство по PHP говорит

empty() является противоположностью (логического) var, за исключением того, что предупреждение не генерируется, когда переменная не установлена.

Относительно isset

Руководство по PHP говорит

isset() вернет FALSE, если тестирует переменную с нулевым значением


Ваш код будет хорошо, как:

<?php
    $var = '23';
    if (!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

Например:

$var = "";

if(empty($var)) // true because "" is considered empty
 {...}
if(isset($var)) //true because var is set 
 {...}

if(empty($otherVar)) //true because $otherVar is null
 {...}
if(isset($otherVar)) //false because $otherVar is not set 
 {...}

Ответ 2

В вашем конкретном случае: if ($var).

Вам нужно использовать isset, если вы не знаете, существует ли переменная или нет. Поскольку вы заявили об этом на первой строке, вы знаете, что он существует, поэтому вам не нужно, nay, не использовать isset.

То же самое относится к empty, только то, что empty также объединяет проверку правдоподобия значения. empty эквивалентно !isset($var) || !$var, а !empty эквивалентно isset($var) && $var, или isset($var) && $var == true.

Если вы хотите протестировать переменную, которая должна существовать для правды, if ($var) вполне адекватна и соответствует точке.

Ответ 3

Вы можете просто использовать empty() - как показано в документации, он вернет false, если переменная не имеет значения.

Пример на той же странице:

<?php
$var = 0;

// 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';
}
?>

Вы можете использовать isset, если хотите узнать, не является ли оно NULL. В противном случае кажется пустым() просто отлично использовать в одиночку.

Ответ 4

Пусто возвращает true, если параметр var не задан. Но isset возвращает true, даже если var не пуст.

Ответ 5

Вот выходы isset() и empty() для 4-х вариантов: необъявленные, нулевые, ложные и истинные.

$a=null;
$b=false;
$c=true;

var_dump(array(isset($z1),isset($a),isset($b),isset($c)),true); //$z1 previously undeclared
var_dump(array(empty($z2),empty($a),empty($b),empty($c)),true); //$z2 previously undeclared

//array(4) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(true) [3]=> bool(true) } 
//array(4) { [0]=> bool(true) [1]=> bool(true) [2]=> bool(true) [3]=> bool(false) } 

Вы заметите, что все результаты "isset" противоположны "пустым" результатам, за исключением случая $b=false. Все значения (кроме значения null, которое не является значением, но не значением), которое вычисляет значение false, вернут true при проверке на isset и false при проверке на "пустое".

Поэтому используйте isset(), когда вас беспокоит существование переменной. И используйте empty, когда вы тестируете true или false. Если фактический тип пустоты имеет значение, используйте is_null и ===0, ===false, ===''.

Ответ 6

$var = 'abcdef';
if(isset($var))
{
   if (strlen($var) > 0);
   {
      //do something, string length greater than zero
   }
   else
   {
     //do something else, string length 0 or less
   }
}

Это простой пример. Надеюсь, что это поможет.

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