webForumDet fria alternativet

Funktion med valfritt antal argument?

PHP

4 svar · 232 visningar · startad av Peeer

Medlem sedan mars 20025 907 inlägg
Frågan#1

Har en funktion som ser ut som nedan. Problemet är att jag vill kunna anropa den med valfritt antal argument. Dvs. Hoppa över ett argument ibland.
Om jag ex. inte vill skicka med $intID så vill jag kunna skriva ex. mkLink("Doff",,"Hihi","hej"), men det går inte.
Parse error: parse error, unexpected ',' in e:\wwwroot\pm.php on line 79.
Så då måste jag lägga in ett totalt onödigt värde där mkLink("Doff",1,"Hihi","hej"). Kan ju inte vara nödvändigt att man måste göra så?

function mkLink($strType,$intID,$strName,$strText)
{
...
}
Medlem sedan juli 2002630 inlägg
#2

Du kan skicka in tomma variabler och använda dig av empty() för att filtrera de. Notera dock att empty() returnerar sant även då värdet är 0 och "0".
http://se.php.net/manual/en/function.empty.php

Medlem sedan aug. 2001153 inlägg
#3

Man kan ju fuska o köra eval annars.
Men i ditt fall är det nog lättare o skicka dummyvalue känns det som.

function foo()
{
foreach (func_get_args() as $k=>$arg) eval ("\$$arg;");
return $a+$b;
}
echo "A+B: ".foo("a=5", "b=3");
Medlem sedan aug. 20002 975 inlägg
#4

Det går inte att hoppa över argument, men däremot går det att plocka bort dom från slutet om man har standardvärden:

function mkLink($strType, $intID=1, $strName='HiHi', $strText='Hej')

Då går det att kalla på funktionen på följande vis:

mkLink("Doff",1,"värde 1","värde 2");
mkLink("Doff",2,"Tjoho");
mkLink("Doff",0);
mkLink("Doff");

När inget argument är anget i funktionsanropet så tas standardvärdet. Jag repeterar: du kan däremot inte hoppa över argument.

Medlem sedan mars 20025 907 inlägg
#5

Jahaja, tack för hjälpen killar!

260 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)