Web

isset() и empty() - что лучше использовать?

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

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

<?php

    $var = '23';

    if (isset($var)&&!empty($var)){

        echo 'не пустая';

    }else{

        echo 'не установлена или пуста ';

    }

?>

 

 Ответ 1

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

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

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

С помощью empty следующие вещи считаются пустыми:

  1. "" (пустая строка)

  2. 0 (0 как целое число)

  3. 0.0 (0 как плавающая величина)

  4. "0" (0 как строка)

  5. NULL

  6. FALSE

  7. array() (пустой массив)

  8. var $var; (переменная, объявленная, но не имеющая значения в классе)

См. в документации по ссылке:

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

 В руководстве PHP сказано:

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

 Что касается isset. В руководстве PHP говорится, что:

isset() вернет FALSE при проверке переменной, которая была установлена в NULL.

 Ваш код будет выглядеть следующим образом:

<?php

    $var = '23';

    if (!empty($var)){

        echo 'не пустая';

    }else{

        echo 'не установлена или пустая';

    }

?>

 Для примера:

$var = "";

if(empty($var)) // истина, потому что "" считается пустым

 {...}

if(isset($var)) //истина, потому что var установлен 

 {...}

if(empty($otherVar)) //истина, потому что $otherVar равен null

 {...}

if(isset($otherVar)) //false, потому что $otherVar не установлен 

 {...}

 

 Ответ 2

В вашем конкретном случае: if ($var). Вам нужно использовать isset, если вы не знаете, существует переменная или нет. Поскольку вы объявили ее в самой первой строке, вы знаете, что она существует, следовательно, вам не нужно, а точнее, не следует использовать isset. То же самое относится и к empty, только в empty также сочетается проверка истинности значения. empty эквивалентен !isset($var) || !$var, и !empty эквивалентен isset($var) && $var, или isset($var) && $var == true. Если вы хотите проверить на истинность только переменную, которая должна существовать, то if ($var) вполне адекватен и понятен.

 

Ответ 3

Вот результаты работы isset() и empty() для 4 возможностей: undeclared, null, false и true.

$a=null;

$b=false;

$c=true;

var_dump(array(isset($z1),isset($a),isset($b),isset($c)),true); //$z1 ранее была необъявлена

var_dump(array(empty($z2),empty($a),empty($b),empty($c)),true); //$z2 ранее не была объявлена

//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' противоположны результатам 'empty', за исключением случая $b=false. Все значения (кроме null, который является не значением, а не-значением), которые оцениваются как false, возвращают true при проверке isset и false при проверке empty. Поэтому используйте isset(), если вас интересует существование переменной. И используйте empty, когда вы проверяете истинность или ложность. Если фактический тип пустоты имеет значение, используйте is_null и «===0», «=== false», «===''».


Ответ 4

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

<?php

$var = 0;

// Вычисляет true, потому что $var пуст.

if (empty($var)) {

    echo '$var либо равен 0, либо пуст, либо вообще не задан ';

}

// Оценивается как true, потому что $var установлен

if (isset($var)) {

    echo '$var устанавливается, даже если он пуст ';

}

?>

 

Схожие статьи

Web

Где PHP хранит журнал ошибок?

Web

Как зашифровать/расшифровать данные на php

Web

Как сделать так, чтобы все значения PHP echo попадали в таблицу HTML

Cloudflare: как подключить и настроить сертификат SSL. Подробный гайд
Web

Cloudflare: как подключить и настроить сертификат SSL. Подробный гайд