PHP hádanka III.
Je pondělí a s ním „pravidelná“ hádanka pro PHP kódéry. Chtěl jsem původně přijít s něčím složitějším, ale nechám si to na čtvrtek, přece jen po víkendu hlava ještě tak nepracuje.
Dnešní otázka tedy zní: jakou hodnotu bude mít $a
?
$a = 123;
$b = & $a;
$a = & $b;
echo $a;
Komentáře
korel #1
123?
Havran #2
Napíše niečo v zmysle rekurzia? A včul si to idem testnúť 🙂
Havran #3
Ahem, 123… (PHP4).
Adam Hošek #4
No jistě, 123, protože nejprve se do $a uloží 123, pak se z $b udělá reference na to samé, na co JIŽ je referencí $a a pak se znovu určí a jako reference na tu samou proměnnou. Takže se dá říct, že třetí řádek je zbytečný a jen žere CPU time :)).
Totiž každé jméno proměnné je pouze referencí na ten obsah. Takže mezi sebou můžete prohazovat reference a bude to stále to samé :).
Adam Hošek #5
#2 Havrane, Pokud by šlo o rekurzi, tak by se to muselo chovat jako ukazatele z C, ale to je právě ten problém. Občas by se mi něco jako ukazatele v PHP taky hodilo :). Resp. ono existuje toto:
Snad by to mělo vypsat:
bab
Nezkoušel jsem. Ale každopádně už jde o rekurzi. Nevýhoda oproti ukazatelům v C je ta, že tohle jsou ukazatele na názvy proměnných. Možná by se dalo říct ukazatel na referenci, ale to by zase mohlo znamenat i něco jiného ;).
David Grudl #6
#4 Adame Hošku, BINGO, lépe bych to nenapsal.
Taková zajímavost: ty tři řádky kódu lze libovolně zpřeházet a vždy bude výsledek stejný
Mormegil #7
#5 Adame Hošku, „Variable variables“ jsou jedna z největších prasáren v PHP.
jirkaz #8
#5 Adame Hošku, Hmmm taky jsem nezkoušel, ale je naprosto zřejmé, že to nevypíše
bab
aleaba
.Adam Hošek #9
#8 jirkazi, Ó ano :). Sám jsem se v tom zakroutil :))). Totiž $$a ukazuje na $b, ale už jsem nedomyslel, že obsah $b je „a“, takže to vypíše „a“ a ne „b“ :))).
#7 Mormegile, Netvrdim, že neni. Jinak bych to asi taky používal. To už jsou mnohem lepší právě ty reference. Zvláště pak, když třeba používám zanořované prvky (představte si třeba rubriky na webu) a implementuji v OOP. Díky webu https://web.archive.org/…atterns.com/ se mi to povedlo. Musí tam být dobře ošetřená práce s výměnou referencí bla bla bla… to by zase vydalo na samostatný článek :)).
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.