Na navigaci | Klávesové zkratky

Translate to English… Ins Deutsche übersetzen…

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

  1. korel #1

    123?

    před 12 lety
  2. Havran http://www.fem.uniag.sk/havran/blog/ #2

    avatar

    Napíše niečo v zmysle rekurzia? A včul si to idem testnúť :-)

    před 12 lety | reagoval [5] Adam Hošek
  3. Havran http://www.fem.uniag.sk/havran/blog/ #3

    avatar

    Ahem, 123… (PHP4).

    před 12 lety
  4. Adam Hošek http://mamuf.bloguje.cz #4

    avatar

    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é :).

    před 12 lety | reagoval [6] David Grudl
  5. Adam Hošek http://mamuf.bloguje.cz #5

    avatar

    #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:

    $a = "b";
    $b = "a";
    echo $$a;
    echo $$b;
    echo $$$b;

    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 ;).

    před 12 lety | reagoval [7] Mormegil [8] jirkaz
  6. David Grudl http://davidgrudl.com #6

    avatar

    #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ý

    před 12 lety
  7. Mormegil #7

    #5 Adame Hošku, „Variable variables“ jsou jedna z největších prasáren v PHP.

    před 12 lety | reagoval [9] Adam Hošek
  8. jirkaz http://zahradil.info #8

    #5 Adame Hošku, Hmmm taky jsem nezkoušel, ale je naprosto zřejmé, že to nevypíše bab ale aba.

    před 12 lety | reagoval [9] Adam Hošek
  9. Adam Hošek http://mamuf.bloguje.cz #9

    avatar

    #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 http://www.phppatterns.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 :)).

    před 12 lety

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.