Argumentumok átadása név szerint
A PHP fejlesztői listán merült fel, hogy a PHP 6-ban bevezessék a paraméterek név szerinti átadásának lehetőségét. Maga az ötlet nem új, például Pythonban, vagy az egyre népszerűbb Ruby-ban is megtalálható ez a lehetőség (és a Perl 6-ba is tervezik). Segítségével beszédesebbé tehetők a függvények argumentumlistái, illetve így akár megengedhető lenne a paraméterek tetszőleges sorrendű átadása, nem kellene mindig a régebben használt függvények miatt a kézikönyveket és referenciákat bújni. A kód maga szolgáltatná a saját API-ját.
Jared White felvetése szerint tehát a PHP elbírná a következő kifejezést:A vitafonal Jared levelével indul. A nevesített paraméterátadás ugyan konkrét új funkciót nem nyújt, de rugalmasabbá teheti az opcionális paraméterek használatát, kényelmesebbé és szebbé teheti a kódot. Hasonlít arra, mintha egy asszociatív tömböt adnánk át, de a "fogadó oldalon", vagyis a függvény definíciójánál, illetve az átadott paraméterek felhasználásakor további a nyelv által biztosított automatikus lehetőségeket biztosít, szemben például egy általunk megvalósítandó feltétel halmazzal.
■ Jared White felvetése szerint tehát a PHP elbírná a következő kifejezést:
<?php adduser(username: 'root', password: 'abcdefg', superuser: true); ?>
Ha valaki nagyon ragaszkodik hozzá...
Mr.Tiny [http://tiny.uw.hu]
Perl
Az egésznek az alapja az, hogy a Perl hash-ek igazából megadhatók mint egy lista, aminek a párosadik (ugye nullával kezdve számozunk) elemei a kulcsok, páratlanadik elemei az értékek. Egy szubrutin paraméterei pedig lista.
A lényeg egy függvény elkészítésekor, hogy ezt a konverziót elvégezzük. Ez egyetlen sor az elején:
beépített támogatás
<Nincs cím>
Gondolok itt a CGI modulra (ha már azt felvetetted):
in_array($val,$arr)
és egy csomó más belső függvénynél egyszerűen nincs értelme a hash-es átadásnak, de persze ki hogy szereti :) Szerintem csak felesleges gépelés – szóval remélem azért nem cserélik le a mindent ilyenre, hanem ésszel lesznek.A PHP-ről nincsenek túl mély ismereteim, de tiny fent említette, hogy most is megoldható, hogy a saját függvényeid valami ilyesmit támogassanak – ebből én azt a következtetést vontam le, hogy ha a PHP készítői nagyon akarnák, az alap függvényekbe akár most is beletehetnék az ilyen paraméterátadást, anélkül, hogy egy új szintaktikai elemet bevezetnének. Az egész csak azon áll, hogy bele akarják-e írni az alap librarykba ezt vagy nem.
Gyakorlati haszon?
És ha nekem csak az első és a harmadik paraméter értékét kell megadnom, amúgy jó lesz az alapértelmezett, akkor jól jön, feltéve, ha jól értelmeztem, mire jó.
A gyakorlat az, hogy ilyen viszonylag ritkábban kell, mint az, hogy az összes paramétert megadjuk. Persze ha kell jól jön bármi :-). Csak nekem van egy olyan gyanum, hogy ha bekerül a PHP6-ba, ez a gyakorlatban legtöbbször kényelmi szempontból fog megnyilvánulni és csak a kódmennyiséget növeli. Bár egy részről olvashatóbbá teszi a paraméterek listáját.
De mi van akkor, ha valaki vegyesen használja?
Alternatív megoldás
Ha nem akarod, nem írod ki a "paraméternév:"-ot, ha akarod, akkor pedig kiírod. Még a szövegterpesztő is támogathatja egy "show parameter names" gombocskával, hogy ezeket megmutassa-e vagy sem. Én kiírnám mindenhova, ahol nem egyértelmű, és elrejtetném a texteditorral, ha zavar a sok szöveg.
Felesleges pluszok
Mas
--
Ámon Tamás - http://amon.hu
hason ló
naplo()
nevű függvénynél vettem eddig hasznát, aholis sok paramétert magától kitalál, viszont vannak esetek, amikor azokat azér' fölül kell írni.megjegyzés: a példa-kódban a
${microtime()} = func_get_args()
-ra azért volt szükség, mivel a PHP dokumentáció szerintígy csak a rend kedvéért szerepel ott
bbalint
Ugh!
JS-ben, ha nagyon kell nagyon hasonló megoldás:
Nem tudom
[...]
Ha nincs is, de a hash-es PHP-s megoldáshoz hasonlóan (egy jóval szebb, mint a stringben átadjuk megoldás):
http://www.javascriptkit.com/javatutors/namedfunction.shtml
Illetve JavaScript 2.0:
http://www.mozilla.org/js/language/js20/rationale/named.html
-boogie-
Tombok
Ámon Tamás - http://amon.hu
Nekem kell a régi mód
Most itt a fönti példákon ugyan nem az látszik, hogy az idegeidre fog menni, sőt, ránézve logikus, hogy átláthatóbb az az _egy_ hívás. De az _egész_ program...
C-ben meg évekig programoztam, megvagyok default paraméterek nélkül. Ha kellenek, azt
- meg lehet oldani jelzőváltozókkal (igazán nem bonyolult)
- a sor végére lehet tenni (PHP-ban)
- vagy rendben, vezessük be ezt az újítást (valóban így a legszebb), csak ne kötelezően.
Én jobban örülnék, ha már olyanokkal foglalkoznának, hogy pl. bevezetnének a perl ,,use strict''-jéhez valami hasonló dolgot, amit ha bekapcsolsz, akkor deklarálod kell minden változót. Nem deklarált változókra álljon le értelmezési hibával. Nagyobb program esetén sokkal több segítség, mint ráfordítás - gondoljunk bele, egy apró elírás a változónévben, aminek pont új értéket adsz; és ahelyett, hogy rád szólna a PHP, hogy ,,Öreg, ezt ne csináld már...'', ahelyett misztikus hibákat fog produkláni a programod. :)
--
Kiskübi
E_NOTICE, E_STRICT
E_NOTICE
Azért köszönöm a hasznos infót, és bocs a ,,teljesen offtopic'' miatt. :)
--
Kiskübi