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 |