Na navigaci | Klávesové zkratky

Translate to English… Ins Deutsche übersetzen…

PHP nemá ukazatele

ukazatel Asi každý, kdo programoval v C nebo Delphi, zná ukazatele. V PHP se však s nimi nesetkáme. Namísto nich tu jsou reference. A je dobré vědět, že nejde o totéž. I když spousta článků o PHP tyto pojmy chybně slučuje.

Co je charakteristické pro ukazatele?

  • chci-li znát přímou hodnotu odkazovanou pointerem, musím jej dereferencovat
  • proto musím vždy vědět, jestli proměnná je ukazatel
  • přiřazením a := b, kde b je ukazatel, dojde ke zkopírování ukazatele. Vzniknou tedy dva ukazatelé na stejné místo

Zatímco reference se chovají trošku jinak (možná jednodušeji):

  • není rozdíl mezí proměnnou s přímou hodnou a její referencí
  • tím pádem není třeba provádět dereference
  • takže přiřazením a := b, kde b je reference, dojde ke zkopírování přímé hodnoty proměnné

Reference je tedy alias (přezdívka, synonymum) proměnné, v žádném případě ne ukazatel. Zkuste číst zápis $a = & $b jako $a je synonymum pro $b namísto $a je odkaz na $b. Lépe se Vám zažije skutečný význam kódu.

Nakonec jeden příklad, který pěkně demonstruje rozdíl mezi referencí a ukazatelem:

$b = 'ahoj';
$a = & $b;

unset($b);   // zrušíme $b
echo '$a = ' . $a;

Tento příklad vypíše $a = ahoj. Kdyby $a byl pointer, došlo by naopak k chybě.