ugrás a tartalomhoz

alapértelmezett paraméterértékek kihagyása

Corvus · 2005. Aug. 31. (Sze), 20.38
Sziasztok!

Köztudott, hogy PHP-ben is lehet a paramétereknek alapértelmezett értéket adni. Az a kérdésem, hogy ha több ilyen paraméterem van egy fgv. def.-ben, hogyan érhetem el, hogy csak a második v. többedik alapértelmezettnek adjak értéket a fgv. hívásban.

Köszi: Corvus
 
1

NULL

Hojtsy Gábor · 2005. Aug. 31. (Sze), 22.43
Hát alapvetően nem lehet kihagyni paramétereket, a következőt tudod tenni:

<?php
function proba($paradicsom, $paprika = NULL, $banan = NULL) {
  if (!isset($paprika)) { $paprika = 2; }
  if (!isset($banan)) { $banan = "sárga"; }
  // ...
}

proba(32.5, NULL, "zöld");
2

Köszönöm

Corvus · 2005. Aug. 31. (Sze), 22.53
Java-ban is hasonlóan működik a dolog, ha egy alapértelmezett paraméternek értéket adunk, akkor az utána következő(k)nek is értéket kell adni, mert a fordító nem tudja melyik változónak adtuk.
Mégegyszer köszönöm a segítséget.
3

Nem sok?

Jano · 2005. Szep. 1. (Cs), 09.32
Nem lenne úgy egyszerűbb ha paprika es banan mar a paramétereknél NULL helyett 2 és sárga lenne? Szerintem az is megy PHP-ben.


function proba($paradicsom, $paprika = 2, $banan = "sárga") {

}

Ha esetleg nem lehet elkerulni, hogy hivasnal nem az utolso parameter legyen kihagyva es sok parameter van akkor egy kerulo megoldasnak valami lyat tudok elkepzelni,hogy hivas elott egy asszoc tombot feltoltetsz egy seged fv-nyel, feluldefinialod az ertekit amiknek kell, aztan ezt az asszoc tombot adod at parameterkent. (ha ugy kenyelmesebb utana csinalhastz egyeni valtozokat is az asszoc tomb elemeibol.)


function probaInitParam() {
 paramAr = array('paprika'=> 2, 'banan'=>'zold',tejfol=>'feher');
 return paramAr;
}

function proba($paradicsom, $paramAr) {

}

$paramAr = probaInitParam();
$paramAr['paprika'] = 3;
proba(3,$paramAr);

$paramAr = probaInitParam();
$paramAr['banan'] = "feher";
proba(3,$paramAr);

4

Másik megoldást kerestem.

Corvus · 2005. Szep. 1. (Cs), 11.20
Az asszociatív tömbös megoldást javasolják a php.net manualban. Én inkább egy olyan megoldásra voltam kiváncsi ami e nélkül valósítja meg az értékadást. Minden esetre neked is köszönöm a példakódot.
5

nem sok!

Hojtsy Gábor · 2005. Szep. 1. (Cs), 17.16
Teljesen logikus, hogy a paraméter listában is NULL legyen, mert így csak egyetlen helyen kell megadni az alapértéket. Gondold tovább az első példádat. Ha valaki ki akar hagyni egy paramétert, akkor vagy tudja, hogy mennyi az alapértéke (annyiszor lesz benne a programban, nem jó!), vagy NULL-t ad meg (akkor a függvényen belül mégegyszer lesz a NULL ellenőrzés miatt, nem jó!). Az én javaslatommal csak egyszer van meg az alapérték, igaz, nem az eredeti felsorolásban.
6

értem

Jano · 2005. Szep. 1. (Cs), 23.51
Annyi az előnye a NULL-os megoldásnak, hogy az alapértékeket nem kell tudni, cska hogy hány NULL-t kell beírni.

Viszont szerintem csúnya az az issetes rész a fv elején, dehát izlések és pofonok.
7

nem kell tudni

Hojtsy Gábor · 2005. Szep. 2. (P), 11.48
Az alapértékek változhatnak a fejlesztés során idővel, ezért célszerű csak egy helyen szerepeltetni az értéküket, erre próbáltam rámutatni.