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ě.