Wpisy otagowane ‘empty’

Co robią i czym się różnią funkcje isset() i empty()

środa, 23 Wrzesień 2009

Wielu początkujących programistów php ma problemy z stosowaniem funkcji isset() oraz empty() – nie w każdej sytuacji potrafią jednoznacznie określić jaką wartość powinny te funkcje zwracać dla określonych argumentów. By wyjść im na przeciw postanowiłem zebrać najczęściej występujące przypadki i je wyjaśnić.

<?php
echo isset($a);
echo empty($a);
$a=NULL;
echo isset($a);
echo empty($a);
?>

Gdy zmienna $a nie istnieje lub ma wartość NULL, funkcja isset($a) zwróci wartość false, a funkcja empty($a) zwróci wartość true.

<?php
$a=true;
echo isset($a);
echo empty($a);
?>

Gdy zmienna $a ma wartość true, funkcja isset($a) zwróci wartość true, a funkcja empty($a) zwróci wartość false.

<?php
$a=false;
echo isset($a);
echo empty($a);
$a=0;
echo isset($a);
echo empty($a);
?>

Gdy zmienna $a ma wartość false lub 0, funkcje isset($a) i empty($a) zwrócą wartość true.

<?php
$a=-3;
echo isset($a);
echo empty($a);
$a=1.36;
echo isset($a);
echo empty($a);
?>

Gdy zmienna $a ma wartość liczbową różną od 0, to isset($a) zwróci wartość true, a funkcja empty($a) zwróci wartość false.

<?php
$a=”;
echo isset($a);
echo empty($a);
$a=’0′;
echo isset($a);
echo empty($a);
?>

Gdy zmienna $a jest pustym łańcuchem znaków lub łańcuchem składającym się z pojedynczego znaku ’0′, funkcje isset($a) i empty($a) zwrócą wartość true.

<?php
$a=’000′;
echo isset($a);
echo empty($a);
$a=’ ‘;
echo isset($a);
echo empty($a);
$a=’Ala ma 3/4 kota’;
echo isset($a);
echo empty($a);
?>

Gdy zmienna $a zawiera kilka znaków ’0′, lub zawiera znak spacji lub jest dowolnym innym ciągiem znaków, to isset($a) zwróci wartość true, a funkcja empty($a) zwróci wartość false.

<?php
$a=array();
echo isset($a);
echo empty($a);
?>

Gdy zmienna $a jest tablicą nie zawierającą żadnych elementów, funkcje isset($a) i empty($a) zwrócą wartość true.

<?php
$a=array(NULL);
echo isset($a);
echo empty($a);
$a=array(false);
echo isset($a);
echo empty($a);
$a=array(0);
echo isset($a);
echo empty($a);
$a=array(”);
echo isset($a);
echo empty($a);
?>

Gdy zmienna $a jest tablicą zawierającą puste elementy np. NULL, false, 0, pusty łańcuch znaków, to isset($a) zwróci wartość true, a funkcja empty($a) zwróci wartość false.

<?php
$a=array(‘kolor’ => ‘zielony’);
echo isset($a['kształt']);
echo empty($a['kształt']);
$a=array(‘krokodyl’, ‘żaba’, ‘hipopotam’);
echo isset($a[8]);
echo empty($a[8]);
class Test
{
var $a;
}
$a=new Test();
echo isset($a->a);
echo empty($a->a);
?>

Gdy odwołujemy się do nieistniejącego klucza lub indeksu tablicy albo do pustego pola obiektu, funkcja isset($a) zwróci wartość false, a funkcja empty($a) zwróci wartość true.

Dla wygody wszystkie rozpatrywane przypadki zebrałem w tabelce poniżej.

badany element isset() empty()
brak zmiennej false true
NULL false true
wartość logiczna true true false
wartość logiczna false true true
wartość liczbowa 0 true true
inna wartość liczbowa true false
pusty łańcuch znaków true true
łańcuch znaków zawierający zero true true
łańcuch znaków zawierający wiele zer true false
spacje true false
dowolny ciąg znaków true false
pusta tablica true true
tablica zawierająca puste elementy
(np. o wartościach NULL, false, 0, pusty łańcuch znaków)
true false
nieistniejący klucz tablicy false true
nieistniejący indeks tablicy false true
pole klasy bez podstawionej wartości false true