Avatar billede mewm Nybegynder
26. juni 2008 - 09:42 Der er 14 kommentarer

Funktions parameter

Hey.
Nu har jeg efterhånden kodet PHP i laaang tid.
Men der er et spørgsmål der har naget mig i lang tid, hvor bare ikke har taget mig sammen til at spørge.

Hvis jeg har følgene funktion

function test($param_one, $param_two = "default 2", $param_three) {

}

Når jeg kalder den funktion, hvordan kan jeg så sætte det tredje parameter, og så stadigvæk bruge default værdien i $param_two ??
Avatar billede jakobdo Ekspert
26. juni 2008 - 09:46 #1
Du bør så flytte rundt på det:
function test($param_one, $param_three, $param_two = "default 2") {

}

Så kan du kalde:

test(1,2);
og test(1,2,3);
Avatar billede mewm Nybegynder
26. juni 2008 - 09:49 #2
Findes der ikke en anden mulighed for at ignorere dem, fordi det er ikke så simpelt som jeg beskrev ovenover. Jeg har faktisk en funktion med 4 parameter hvor de alle sammen har en default værdi, men der er et sted hvor jeg skal kalde funktionen hvor jeg kun sætter sidste parameter. Og et andet sted hvor jeg skal sætte både 2 og 4 parameter.

Der må da være en måde at undgå det på?
Avatar billede erikjacobsen Ekspert
26. juni 2008 - 09:57 #3
Det kan du ved at angive default-værdien
  test("bqf","default 2","og så den tredie")
Avatar billede mewm Nybegynder
26. juni 2008 - 10:03 #4
Ja selvfølgelig kan man det, men så kan jeg jo lige så godt lade være med at have en defualt value
Avatar billede pidgeot Nybegynder
26. juni 2008 - 10:11 #5
Hvis du ikke kan placere de parametre du ikke vil bruge til sidst i din signatur, så kan du ikke bruge default-værdier i funktionsdeklarationen. I andre sprog kunne du, hvis det da er de samme 2 parametre hver gang du kalder med 2, bruge overloading, men PHP er ikke videre god på det punkt (der er vist noget med det er muligt fra PHP5, men jeg har aldrig kigget på det, og det er vist ikke videre intuitivt) - man kan selvfølgelig lave separate metoder der kalder "grundmetoden", men så skal man jo huske det er et andet navn.

Du kunne måske i stedet vedtage at du i stedet kaldte med null som værdi, og så satte default-værdi i starten af funktionen. Hvis du ikke vil reservere en bestemt værdi, kunne en anden mulighed være at du i stedet for parametre sender et array ind med navngivne indexes til de parametre du vil bruge, og så tilføjer dine default-værdier i starten ved at checke med array_key_exists.

Et tredje alternativ kunne være at du i stedet for parametre laver en klasse, hvor du med separate metoder sætter værdien der skal bruges når du kalder metoden (der så ikke skal have parametre). Det har dog den ulempe at hvis den skal kaldes flere gange i samme sammenhæng, og et af de tidligere kald har skullet specificere en bestemt værdi, men den næste ikke skal, så skal du enten oprette en ny instans af objektet, eller have en "reset"-metode der nulstiller det.

Hvad laver din metode i øvrigt, siden det er så "løse" krav du stiller til parametrene? Bare af ren nysgerrighed :)
Avatar billede jakobdo Ekspert
26. juni 2008 - 10:46 #6
En mulighed var at bruge:

http://dk.php.net/func_get_args
Avatar billede rax Praktikant
26. juni 2008 - 11:30 #7
ehm.. mener du bare kan bruge:
test(1 => 'param_one', 2 => 'param_three');

men er ikke sikker.. man kan i andre sprog, og mener altså også man kan i php..
Avatar billede jakobdo Ekspert
26. juni 2008 - 11:46 #8
rax: Hvad er det du svarer på ?
Avatar billede rax Praktikant
26. juni 2008 - 12:08 #9
Når jeg kalder den funktion, hvordan kan jeg så sætte det tredje parameter, og så stadigvæk bruge default værdien i $param_two ??  <--  det spørgsmål.
Avatar billede jakobdo Ekspert
26. juni 2008 - 12:16 #10
Den metode virker altså ikke i php! :o)
Avatar billede rax Praktikant
26. juni 2008 - 13:13 #11
hehe ok, så beklager jeg :]
kunne som sagt ikke huske om man kunne i php.. bare ignorer svar ^^
Avatar billede mewm Nybegynder
06. februar 2009 - 18:54 #12
Ja, tænkte nok func_args var løsningen. Smid et svar jer der fortjener der :=)
Avatar billede jakobdo Ekspert
06. februar 2009 - 19:27 #13
Svar!
Avatar billede erikjacobsen Ekspert
06. februar 2009 - 19:41 #14
Nej tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester