/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Springe argumenter over i funktion
Fra : scootergrisen


Dato : 19-11-10 18:33

Hvordan hopper jeg et argument over når jeg kalder en funktion ?

Lad os sige vi har denne funktion med 4 argumenter :
function abe($overskrift, $a, $b = true, $c = true){

Den kan jeg kalde med :
abe('bruno', '5 år gammel');

Men lad os så sige jeg ønsker at kalde abe() og sætte $c men ikke $b.

Jeg har prøvet med :

abe('bruno', '5 år og 30 sekunder gammel', null, 'false');

Men det gav ikke lige det ønskede resultat.

null er åbenbart ikke det samme som ikke at være sat.
Det betyder vel at $b bliver sat, men sat til ingenting.

Og når jeg så senere tester om $b er true eller false så er den true
hvis den er sat til null.

Jeg kunne godt omskrive koden men det ville være super hvis man bare
kunne springe nogle argumenter over.

 
 
Krabsen (19-11-2010)
Kommentar
Fra : Krabsen


Dato : 19-11-10 20:08

Den 19-11-2010 18:33, scootergrisen skrev:
> Hvordan hopper jeg et argument over når jeg kalder en funktion ?
>
> Lad os sige vi har denne funktion med 4 argumenter :
> function abe($overskrift, $a, $b = true, $c = true){
>
> Den kan jeg kalde med :
> abe('bruno', '5 år gammel');
>
> Men lad os så sige jeg ønsker at kalde abe() og sætte $c men ikke $b.
>
> Jeg har prøvet med :
>
> abe('bruno', '5 år og 30 sekunder gammel', null, 'false');
>
> Men det gav ikke lige det ønskede resultat.
>
> null er åbenbart ikke det samme som ikke at være sat.
> Det betyder vel at $b bliver sat, men sat til ingenting.
>
> Og når jeg så senere tester om $b er true eller false så er den true
> hvis den er sat til null.
>
> Jeg kunne godt omskrive koden men det ville være super hvis man bare
> kunne springe nogle argumenter over.

Hvorfor ikke bare kalde den med blanke argumenter, hvis de alligevel
ikke skal bruges i funktionen ( i denne situation )?

abe('bruno', '5 år og 30 sekunder gammel', ' ', 'false');

scootergrisen (19-11-2010)
Kommentar
Fra : scootergrisen


Dato : 19-11-10 21:12

> Hvorfor ikke bare kalde den med blanke argumenter, hvis de alligevel
> ikke skal bruges i funktionen ( i denne situation )?
>
> abe('bruno', '5 år og 30 sekunder gammel', ' ', 'false');

' ' er jo ikke ingenting. Det er et mellemrum. Det kunne jeg jo godt men
jeg vil gerne have den får tildelt standard værdien der står i
argumentlisten.

Så denne kode...

sig($ost = 'gul', $vin){
echo $ost . $vin;
}

sig( , 'rød');

....vil give...

gulrød


Jeg kunne jo godt skrive...

sig($ost = 'gul', $vin){
if($ost == ' '){ $ost = 'gul'; }   
echo $ost . $vin;
}

....men det vil jeg da gerne undgå hvis jeg kan.
Så har jeg jo standardværdien jeg skal rette 2 steder.

Birger Sørensen (19-11-2010)
Kommentar
Fra : Birger Sørensen


Dato : 19-11-10 20:08

scootergrisen:
> Hvordan hopper jeg et argument over når jeg kalder en funktion ?
>
> Lad os sige vi har denne funktion med 4 argumenter :
> function abe($overskrift, $a, $b = true, $c = true){
>
> Den kan jeg kalde med :
> abe('bruno', '5 år gammel');
>
> Men lad os så sige jeg ønsker at kalde abe() og sætte $c men ikke $b.
>
> Jeg har prøvet med :
>
> abe('bruno', '5 år og 30 sekunder gammel', null, 'false');
>
> Men det gav ikke lige det ønskede resultat.
>
> null er åbenbart ikke det samme som ikke at være sat.
> Det betyder vel at $b bliver sat, men sat til ingenting.
>
> Og når jeg så senere tester om $b er true eller false så er den true hvis den
> er sat til null.
>
> Jeg kunne godt omskrive koden men det ville være super hvis man bare kunne
> springe nogle argumenter over.

Du kan springe argumenter med default værdi over, bagfra.
Så du skal bytte om på dine to argumenter $b og $c, hvis du vil kunne
udelade $b eller $b og $c.
Som du har skrevet det, kan du udelade $c eller $b og $c

I forhold til det jeg tror du skriver, skal du så måske også forstå at
default værdien tildeles, hvis du ikke giver nogen værdi selv. Den kan
altså ikke være udefineret, som det for mig ser ud til du forventer...

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



scootergrisen (19-11-2010)
Kommentar
Fra : scootergrisen


Dato : 19-11-10 21:08

> Du kan springe argumenter med default værdi over, bagfra.
> Så du skal bytte om på dine to argumenter $b og $c, hvis du vil kunne
> udelade $b eller $b og $c.
> Som du har skrevet det, kan du udelade $c eller $b og $c

Ja det ved jeg men jeg tænkte om der var mulighed for at springe et
argument over hvis nu man ikke ønskede at ændre noget i funktionens kode.

> I forhold til det jeg tror du skriver, skal du så måske også forstå at
> default værdien tildeles, hvis du ikke giver nogen værdi selv. Den kan
> altså ikke være udefineret, som det for mig ser ud til du forventer...

Ja det er netop det jeg gerne vil have. Altså at default værdien
tildeles når jeg ønsker at hoppe argumentet over.

Så denne kode...

sig($ost = 'gul', $vin){
echo $ost . $vin;
}

sig( , 'rød');

....vil give...

gulrød

Birger Sørensen (19-11-2010)
Kommentar
Fra : Birger Sørensen


Dato : 19-11-10 21:39

Følgende er skrevet af scootergrisen:
>> Du kan springe argumenter med default værdi over, bagfra.
>> Så du skal bytte om på dine to argumenter $b og $c, hvis du vil kunne
>> udelade $b eller $b og $c.
>> Som du har skrevet det, kan du udelade $c eller $b og $c
>
> Ja det ved jeg men jeg tænkte om der var mulighed for at springe et argument
> over hvis nu man ikke ønskede at ændre noget i funktionens kode.

Og det helt præcise svar til det er : nej!

8X
> sig($ost = 'gul', $vin){
8X

Bør vist give en kompileringsfejl.
Argumenter med default værdier, skal stå sidst i argumentlisten, svjh.
Og de kan tilsvarende kun springes over bagfra. Du kan ikke udelade et
argument i midten.

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Martin Larsen (19-11-2010)
Kommentar
Fra : Martin Larsen


Dato : 19-11-10 22:18

Birger Sørensen wrote:

> Og det helt præcise svar til det er : nej!

Korrekt. Det nærmeste du kan komme er nok selv at teste på null-værdien, fx:

if($vin==null) $vin="rød";

Men det kræver jo ændring i koden

scootergrisen (19-11-2010)
Kommentar
Fra : scootergrisen


Dato : 19-11-10 22:42

> Det nærmeste du kan komme er nok selv at teste på null-værdien,
> fx:
>
> if($vin==null) $vin="rød";
>
> Men det kræver jo ændring i koden

Ja jeg har prøvet om null betød at argumentet blev sprunget over men så
bliver værdien sat til null og ikke standard argumentet også når jeg
tester med...

if($ost){

så er $ost jo sat til null og ikke true eller false som standard værdien er.

Det lader til man ikke kan også må jeg lave koden om.

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste