PHP rozdiel medzi isset() & is_null()

Ing. Miloslav Ponkrác miloslav.ponkrac na infos.cz
Sobota Duben 20 00:18:12 CEST 2002


>IsSet() Ti rekne jestli vubec promenná existuje a má nejakou hodnotu (byt
>nulovou) a Is_Null() overuje, jestli existující promenná má nastavenou
>hodnotu na nulu.


To tak určitě není. Už podle manuálu je to blbost.

Funkce isset() pracuje naprosto jasně. Říká, jestli proměnná existuje.
Proměnná, která existuje, má zaručeně nějakou hodnotu, ať už nulovou, nebo
nenulovou.

Pokud proměnná existuje, lze jí smazat pomocí funkce unset($prom). A nebo
pomocí $prom=NULL. Pokud budu naprosto přesný, mezi oběma možnostmi je dost
rozdíl. Nastavení proměnné na NULL odmaže všechn y proměnné i reference na
ně. Použití konstrukce unset() (od PHP verze 4 to už není funkce) způsobí
pouze odstranění odkazu na hodnotu.

Příklady:

$a = 3;
$b = &$a;
// $a obsahuje 3, $b obsahuje také 3
$a = NULL;
// $a i $b přestalo existovat

Jiný příklad:

$a = 3;
$b = &$a;
// $a obsahuje 3, $b obsahuje také 3
unset($a);
// $a přestalo existovat, $a obsahuje 3

Ještě jiný příklad:

$a = 3;

function test()
{
  global $a;
  echo $a; // vypíše 3
  unset($a);
  // Zde unset zrušilo pouze spojení s globální
  // proměnnou $a v této funkci test, ale globální
  // proměnná $a existuje dále.
  echo $a; // vypíše nulu
  global $a;
  echo $a; // vypíše 3
}


Funkce is_null() rozhodně netestuje, zda proměnná má nulovou hodnotu, na to
je funkce empty(), a nebo výraz (bool)$prom, ale v podstatě testuje
přítomnost hodnoty NULL, tedy prakticky existenci proměnné. Nenašel jsem
rozdíl mezi použitím isset() a !is_null(). V samotném manuálu jsou detaily
skryty, a odpověď jsem se nedočetl, takže jsem si alespoň spoustu příkladů
zkusil.

S pozdravem

Miloslav Ponkrác



Další informace o konferenci Linux