» »

PHP uganka (za mojstre)

PHP uganka (za mojstre)

technolog ::

Kaj izpiše spodnja koda:

$a=array(1,2,3);
foreach($a as &$b) {}
foreach($a as $b) {echo $b;}


Ne velja testirat! :)

MrBrdo ::

Izpiše
v PHP včasih ni dosti en dolar pred spremenljivko zato damo včasih kar dva
MrBrdo

keworkian ::

MrBrdo je izjavil:

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

Senitel ::

Dobra! ;)

technolog ::

Tud dva dolarja sta v PHPju čist veljavna zadeva, tako da res ne razumem...

Upa kdo izstrelit odgovor?

Genetic ::

122

FrEaKmAn ::

technolog ::

:)

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)

technolog ::

Res je.

Po resnici, kdo je iz prve ustrelil pravilen odgovor, brez da bi googlal ali testiral?

MrBrdo ::

Jaz... Pa niti kode nisem dobro prebral :)
MrBrdo

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

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[php] array

Oddelek: Izdelava spletišč
81370 (1215) sebavet
»

php array sortiranje

Oddelek: Izdelava spletišč
91189 (912) Mesar
»

Php pomoč

Oddelek: Programiranje
141972 (1405) Dober dan
»

[PHP]Zajem podatkov iz baze

Oddelek: Programiranje
354045 (3682) cobrica
»

Link::EXTOR

Oddelek: Programiranje
61042 (960) poweroff

Več podobnih tem