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 ??
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.
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 :)
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.