mboost-dp1

Funktioner i php, der kan "undvære" parametre


Gå til bund
Gravatar #1 - gi-jones
31. maj 2005 13:38
Kan det ikke lade sig gøre, at definere en funktion, så den har mulighed for at modtage et antal parametre således:

function hun($1,$2,$3)
{
}

...men samtidig godt kan undvære eksempelvis den sidste. Altså så funktionen kan kaldes på følgende måder:

function($1,$2,$3);
function($1,$2);
Gravatar #2 - Simm
31. maj 2005 13:57
jo.. jeg tror det er denne funktion du leder efter:
http://dk.php.net/manual/da/function.func-get-arg....
Gravatar #3 - amokk
31. maj 2005 14:04
#1 jo

nu vil jeg så på det kraftigste fraråde dig at lave variabler der starter med tal...

du kan lave en funktion således:

function blabla($param1, $param2, $param3=5) {
......
}


den kan du så enten kalde med

blabla($param1, $param2);
eller
blabla($param1, $param2, $param3);

hvis du undlader $param3 vil funktionen bare modtage tallet 5
Gravatar #4 - hundeboll
31. maj 2005 14:13
#1 gi-jones:
amokk har givet dig svaret. Hvis du giver variablen en værdi når du definerer funtionen, så vil du ikke behøve at angive variablen når du kalder funktionen. Dog skal du huske, som ved alle andre funktioner, at de frivillige variabler skal skrives efter de tvungne.
Gravatar #5 - gi-jones
31. maj 2005 14:45
Genialt. Det var lige det svar jeg skulle bruge. Det giver jo også masser af mening hvis man tænker over det, men jeg vidste sgu ikke lige hvor jeg skulle lede.

Jeg ved self godt det med at variabler ikke må være tal. Bare lige en tanketorsk.

Hvad hvis man har mere end en valgfrie variabler, men kun vil sende en værdi til den ene. Kan man gøre noget i retning af:

blabla("param1",,"param3");
Gravatar #6 - hundeboll
31. maj 2005 17:41
blabla("value1",NULL,"value2");

NULL kan også være 0 eller false
Gravatar #7 - cjoey
31. maj 2005 18:14
hvad med blabla("value1","","value3") ?
Gravatar #8 - NFX
31. maj 2005 19:11
#7:
Burde bestemt virke, da "" = NULL.
Gravatar #9 - Klok
31. maj 2005 19:50
en tom streng "" og NULL er bestemt ikke det samme.
Gravatar #10 - amokk
31. maj 2005 20:41
#9 i PHP er false==NULL==0==0,0==""=="0"

sådan i grove træk
Gravatar #11 - Acro
31. maj 2005 21:29
#6 Hunn:
Hvad så hvis den ene parameter er boolean med true som standardværdi, så vil du aldrig kunne ændre denne til false - eller?
Gravatar #12 - amokk
31. maj 2005 21:44
#11 jo, hvis parametren angives i kaldet til funktionen..

det er derfor man skal sørge for at have valgfrie parametre stående til sidst
Gravatar #13 - Acro
31. maj 2005 22:34
#12 amokk:
Hunn argumenterer jo for, at false også kan bruges som en null-værdi, hvis du har flere valgfrie parametre, og du f.eks. ønsker at angive det sidste men ikke det næstsidste.
Gravatar #14 - hundeboll
1. jun. 2005 08:52
#11 Acro:
Jeg er ikke helt sikker, men jeg tror du misforstod ideén med at bruge false, NULL eller 0 som argument. Eller også gjorde jeg :)

Hvis man giver false som argument, så vil det faktisk overskrive default værdien. Hvis man ønsker at bruge en default værdi, men vil gøre det muligt at angive et argument efter denne, så må man tjekke om variablen er false i funktionen:

funktion argument($var1, $var2 = 'test', $var3 = 'default') {
if ($var2 == false) $var2 = 'test';
echo "$var1\n$var2\n$var3";
}

// Funktionen kaldes med $var2 = false:
argument('HejHej', false);

// PHP vil så skrive
HejHej
test
default

Ved ikke om det er den smarteste måde, men det burde i hvert fald virke. :)
Gravatar #15 - fiskah
11. jun. 2005 09:13
#10 Amokk
"0" er bestemt ikke lig NULL

Det bliver bevist ved denne kode:
<?php
if ("0" == NULL) {
echo "'0' == NULL";
} else {
echo "'0' != NULL";
}
?>



Svaret på selve spørgsmålet (I #1) synes jeg ikke fremgår så tydeligt.
Du kan løse dit problem ved følgende kode:

<?php
function minFunktion($paramter1=NULL, $parameter2=NULL, ..., $parameterN=NULL) {
return true;
}
?>
[/quote]
Hvis en af parametrene ($parameter1, ...) ikke er sat bliver de automatisk sat til NULL istedet for at du får en warning om at der mangler en parameter. Hvis du vil nøjes med at kalde funktionen med fx. de sidste to (af 3) parametre kan du gøre således:


<?php
minFunktion( , $parameter1, $parameter2);

Så vidt jeg husker.
Gravatar #16 - fiskah
12. jun. 2005 12:54
Efter lidt undersøgelse er jeg kommet frem til at du ikke kan unlade at angive parameter1 og så angive parameter 2:
minfunktion(, $variabel)
er altså ikke muligt.

Istedet skal du opbygge en klasse og benytte de såkaldte class variables.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login