Forum » Programiranje » PHP uganka (za mojstre)
PHP uganka (za mojstre)
technolog ::
Kaj izpiše spodnja koda:
Ne velja testirat! :)
$a=array(1,2,3); foreach($a as &$b) {} foreach($a as $b) {echo $b;}
Ne velja testirat! :)
- spremenil: technolog ()
keworkian ::
Izpiše
v PHP včasih ni dosti en dolar pred spremenljivko zato damo včasih kar dva
Nauč se razločevat med $ in &, ker ti utegne delat probleme v življenju.
Obscenities in B-Flat
technolog ::
Tud dva dolarja sta v PHPju čist veljavna zadeva, tako da res ne razumem...
Upa kdo izstrelit odgovor?
Upa kdo izstrelit odgovor?
Genetic ::
Po prvem foreachu, ceprav ima prazen blok, ostane referenca &$b na zadnji element arraya.
V drugem foreachu, kjer $b priredi vrednost vsakega elementa v $a, kot side effect spremeni vedno tudi vrednost zadnjega elementa v $a:
1.elt iz $a: $b=1; //$a=(1,2,1)
2.elt iz $a: $b=2; //$a=(1,2,2)
3.elt iz $a (ki ima sedaj vrednost 2): $b=2; //$a=(1,2,2)
V drugem foreachu, kjer $b priredi vrednost vsakega elementa v $a, kot side effect spremeni vedno tudi vrednost zadnjega elementa v $a:
1.elt iz $a: $b=1; //$a=(1,2,1)
2.elt iz $a: $b=2; //$a=(1,2,2)
3.elt iz $a (ki ima sedaj vrednost 2): $b=2; //$a=(1,2,2)
technolog ::
Res je.
Po resnici, kdo je iz prve ustrelil pravilen odgovor, brez da bi googlal ali testiral?
Po resnici, kdo je iz prve ustrelil pravilen odgovor, brez da bi googlal ali testiral?
fiction ::
Na prvi pogled mogoče zgleda kul (kakšno uganko se da sestaviti), ampak v bistvu je pa to samo znak, kako slabo je bil jezik načrtovan. Ko se podobna "uganka" pojavi v realnem svetu, namreč ni več prav nič zabavno. Jezik naj ne bi bil samo izrazno močen, ampak tudi dovolj intuitiven za povprečnega programerja (po možnosti s čim manj "gotcha" primeri).
V tem primeru velja "manj je bolje". Ne vem v čem je smisel, da se ne omeji spremenljivke s katero se iterira v foreach samo na ta scope kot to počnejo drugi jeziki. Foreach je čisto drugo kot for, ne samo način da ne rabiš eksplicitnega števca. Tudi tisto "iteriranje po referenci" je en tak feature, ki se pomoje uporablja v 1 % primerov, zlorablja pa v 10 %. Array_map bi bil najbrž velikokrat replacement. Če ne pa vedno lahko uporabiš tudi navadno for zanko, takih primerov je namreč razmeroma malo.
Obe zadevi skupaj sta pa "smrtonosna kombinacija" in če se že ne da spreminjati delovanja PHP-ja (ker bi bil to breaking change), bi vsaj pričakoval kakšen warning.
Pa pod warning ne mislim
V tem primeru velja "manj je bolje". Ne vem v čem je smisel, da se ne omeji spremenljivke s katero se iterira v foreach samo na ta scope kot to počnejo drugi jeziki. Foreach je čisto drugo kot for, ne samo način da ne rabiš eksplicitnega števca. Tudi tisto "iteriranje po referenci" je en tak feature, ki se pomoje uporablja v 1 % primerov, zlorablja pa v 10 %. Array_map bi bil najbrž velikokrat replacement. Če ne pa vedno lahko uporabiš tudi navadno for zanko, takih primerov je namreč razmeroma malo.
Obe zadevi skupaj sta pa "smrtonosna kombinacija" in če se že ne da spreminjati delovanja PHP-ja (ker bi bil to breaking change), bi vsaj pričakoval kakšen warning.
Pa pod warning ne mislim
"Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset()."kar je napisano v manualu, ampak warning od PHP engina, ki bi lahko detektiral uporabo spremenljivke po tem, ko se je uporabljala "kot referenca" v foreach zanki.
Zgodovina sprememb…
- spremenil: fiction ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [php] arrayOddelek: Izdelava spletišč | 1369 (1214) | sebavet |
» | php array sortiranjeOddelek: Izdelava spletišč | 1188 (911) | Mesar |
» | Php pomočOddelek: Programiranje | 1971 (1404) | Dober dan |
» | [PHP]Zajem podatkov iz bazeOddelek: Programiranje | 4038 (3675) | cobrica |
» | Link::EXTOROddelek: Programiranje | 1041 (959) | poweroff |