PHP: переменная пуста или не установлена ​​или что?

В чем разница между этими четырьмя операторами PHP?

if (isset($data)) {

if (!empty($data)) {

if ($data != '') {

if ($data) {

Все ли они делают то же самое?


person caw    schedule 08.12.2009    source источник


Ответы (4)


if (isset($data)) {  

Просто установлена ​​переменная - перед этой строкой мы объявили новую переменную с именем 'data', т.е. $data = 'abc';

if (!empty($data)) {  

Переменная заполняется данными. У него не может быть пустого массива, потому что тогда $data имеет тип массива, но по-прежнему не имеет данных, т.е. $data = array(1); Не может быть нулевым, пустой строкой, пустым массивом, пустым объектом, 0 и т. д.

if ($data != '') {  

Переменная не является пустой строкой. Но также не может быть пустым значением (примеры выше).
Если мы хотим сравнить типы, используйте !== или ===.

if ($data) {  

Переменная заполняется любыми данными. То же, что и !empty($data).

person hsz    schedule 08.12.2009
comment
В руководстве это сформулировано так: empty() противоположно (boolean) var, за исключением того, что предупреждение не генерируется, если переменная не установлена. См. также этот ответ. - person Stan Sidel; 02.06.2015

Ознакомьтесь с руководством по PHP: http://www.php.net/manual/en/types.comparisons.php

Expression  gettype() empty() is_null() isset() if($x)
$x = "";        string  TRUE    FALSE   TRUE    FALSE
$x = null;      NULL    TRUE    TRUE    FALSE   FALSE
var $x;         NULL    TRUE    TRUE    FALSE   FALSE
$x undefined    NULL    TRUE    TRUE    FALSE   FALSE
$x = array();   array   TRUE    FALSE   TRUE    FALSE
$x = false;     boolean TRUE    FALSE   TRUE    FALSE
$x = true;      boolean FALSE   FALSE   TRUE    TRUE
$x = 1;         integer FALSE   FALSE   TRUE    TRUE
$x = 42;        integer FALSE   FALSE   TRUE    TRUE
$x = 0;         integer TRUE    FALSE   TRUE    FALSE
$x = -1;        integer FALSE   FALSE   TRUE    TRUE
$x = "1";       string  FALSE   FALSE   TRUE    TRUE
$x = "0";       string  TRUE    FALSE   TRUE    FALSE
$x = "-1";      string  FALSE   FALSE   TRUE    TRUE
$x = "php";     string  FALSE   FALSE   TRUE    TRUE
$x = "true";    string  FALSE   FALSE   TRUE    TRUE
$x = "false";   string  FALSE   FALSE   TRUE    TRUE

Как видите, if(!empty($x)) равно if($x), а if(!is_null($x)) равно if(isset($x)). Что касается $data != '', то это TRUE, если $data не NULL, '', FALSE или 0 (нечеткое сравнение).

person jlb    schedule 08.12.2009

Они не одинаковы.

  1. true, если переменная установлена. переменная может быть установлена ​​пустой, и это будет правдой.

  2. true, если переменная установлена ​​и не равна пустой строке, 0, '0', NULL, FALSE, пустому массиву. это явно не то же самое, что isset.

  3. если переменная не равна пустой строке, если переменная не установлена, это пустая строка.

  4. если переменная приводит к истинности, если переменная не установлена, она приводит к ложности.

person meder omuraliev    schedule 08.12.2009

if (isset($data)) — определяет, установлена ​​ли переменная (не делала ставку 'unset()' и не NULL.

if (!empty($data)) — это независимая от типа проверка на пустое значение, если $data имеет значение '', 0, false или NULL, она вернет true.

if ($data != '') { это безопасный строковый тип проверки того, не равен ли $data пустой строке

if ($data) { это поиск истинного или ложного (иначе: 0 или 1)

person Skawful    schedule 08.12.2009
comment
if ($data) { this is a looking for true or false (aka: 0 or 1) ‹- не совсем правильно. Это будет true, если $data содержит что-то, что не разрешается в false (по сути то же самое, что и !empty($data)) - person Blair McMillan; 08.12.2009