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

by Zdeněk Večeřa 5 Comments

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.



Comments ( 5 )

  1. Jakub Bouček
    Ještě bych dodal, že isset() vrací false i tehdy, pokud proměnná existuje, ale obsahuje null.
  2. Zdeněk Veřeřa
    Jakube, díky za doplnění. Článek jsem aktualizoval.
  3. JSo
    Nechci vyznít jako rýpal, ale všechno tohle je napsáno v php manuálu. (Výčtem je uvedeno, co je "empty" ;)
  4. Nik
    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 :-)
  5. jave
    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

Your email address will not be published.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>