Víte, jak se chová zákeřná PHP funkce empty()?

PHP programátoři mají občas nejasnosti s tím, co vrací PHP funkce empty(). Máte prázdnou proměnnou, neexistující proměnnou, prázdné pole nebo proměnnou s hodnotou 0 (nula) či NULL. Víte, co vám empty() v jednotlivých případech vrátí? A aby toho nebylo málo, mrkneme i na isset().

Existuje proměnná nebo ne? Zjistíte to pomocí isset()

Pokud chcete pracovat s proměnnou či polem a nevíte, jestli proměnná/pole existuje, ověřte to pomocí isset(). Například takto:

if (isset($moje_promenna)) {
  echo 'existuje';
} else {
  echo 'neexistuje';
}

Pokud existenci proměnné/pole před použitím neověříte, PHP vám vypíše upozornění na práci s neexistující proměnnou (E_NOTICE). Programátoři C/C++ by se takového prohřešku, jako je práce s neexistující proměnnou, zajisté nedopustili :)

Pokud proměnná existuje a obsahuje hodnotu NULL, vypíše se „neexistuje“ (za doplnění děkuji Jakubu Boučkovi).

$moje_promenna = NULL; // vypíše se „neexistuje“

Je proměnná prázdná? Zkuste empty()

Nejlepší bude, když si ukážeme přímo na příkladech, jak funkce empty() pracuje.

Proměnnou $s postupně naplníme různými hodnotami (viz dále) a otestujeme ji následujícím kódem:

if (empty($s)){
  echo 'JARO';
} else {
  echo 'PODZIM';
}

Co proměnná vrátí je uvedeno hned za hodnotou, jako komentář.

$s = 0; // JARO
$s = '0'; // JARO
$s = ''; // JARO
$s = NULL; // JARO
$s = FALSE; // JARO
$s = array(); // JARO

$s = 1; // PODZIM
$s = 2; // PODZIM
$s = -1; // PODZIM
$s = 'NULL'; // PODZIM
$s = 'TRUE'; // PODZIM
$s = 'FALSE'; // PODZIM
$s = TRUE; // PODZIM

$s = array(0); // PODZIM
$s = array('0'); // PODZIM
$s = array(''); // PODZIM
$s = array(NULL); // PODZIM
$s = array(FALSE); // PODZIM
$s = array(TRUE); // PODZIM
$s = array(array()); // PODZIM
$s = array(1); // PODZIM
$s = array(1 => FALSE); // PODZIM
$s = array(1 => TRUE); // PODZIM
$s = array(1 => NULL); // PODZIM
$s = array(1 => 0); // PODZIM
$s = array(1 => 1); // PODZIM
$s = array(1 => ''); // PODZIM

Z příkladu je tedy patrné, že empty() vrací stejný stav (=proměnná je prázdná) nejen u prázdných řetězců, ale i u prázdných polí, číselných hodnot 0 (nula), a to i v případě, kdy je 0 (nula) zapsaná jako řetězec.




5 Responses to “Víte, jak se chová zákeřná PHP funkce empty()?”

  • Jakub Bouček Says:

    Ještě bych dodal, že isset() vrací false i tehdy, pokud proměnná existuje, ale obsahuje null.

  • Zdeněk Veřeřa Says:

    Jakube, díky za doplnění. Článek jsem aktualizoval.

  • JSo Says:

    Nechci vyznít jako rýpal, ale všechno tohle je napsáno v php manuálu. (Výčtem je uvedeno, co je “empty” ;)

  • Nik Says:

    Osobně jsem názoru, že je jedno kde všude budou rady následujícího typu sepsány. Hlavně, aby byla při šíření zachována jejich správnost :-)

  • jave Says:

    Funkce empty() neni v zadnem pripade zakerna naopak funguje celkem logicky… Zduraznil bych jeji vyuziti pri validaci uzivatelskeho vstupu na strane serveru…
    Ale je to pekny test a je dobre, ze se autor zminil jak o isset tak o empty, mozna by to chtelo spise clanek formou srovnani co ktera funkce vraci – pro novacky…

Leave a Reply