Dynamiska argument till PHP funktioner
2005-04-05 -
747
Ett till PHP-tips från sandman.net. Säg till om jag tråkar ut er. Tina behöver inte svara smile
49739
För en bra stund sen nu så blev jag frustrerad av hur statiskt argumenten till en php-funktion är, det vill säga hur jobbigt det är att skicka med bara de argument man vill skicka med. Säg att man har en funktion som sätter en ram runt texten man skickar in, och man kan välja färg och bredd på ramen. Det skulle kunna se ut så här:
function frame($string, $width, $color){                 return "                         <div style='border: {$width}px solid $color'>                                 $string                         </div>                 ";         }         print frame("Hejsan", 1, "black");
Resultatet är "<div style='border: 1px solid black'>Hejsan</div> " Det jobbiga med ovanstående exempel är att man alltid måste skicka med bredd och färg till funktionen för att den inte ska returnera ett felmeddelande. Så PHP har möjligheten att ange standardvärdena på argumenten:
function frame($string, $width=2, $color="#666"){                 return "                         <div style='border: {$width}px solid $color'>                                 $string                         </div>                 ";         }         print frame("Hejsan");
Och resultatet blir "<div style='border: 2px solid #666'>Hejsan</div> ".
Men detta är inte nog - för om du någon gång vill använda funktionen frame() och behålla standardvärdet för bredd men ange en annan färg till exempel så måste du först kolla upp vad standardvärdet för färg är och även skicka med det. Det går inte att "hoppa över" ett värde. Detta är ett stort problem om du har funktioner med kanske tio argument eller mer. Att behöva skicka med standardvärdena då är ju inte användbart. Lösningen på problemet ligger i PHP-funktionerna func_num_args() och func_get_arg() som kan användas inne i funktionen för att gå igenom alla argument till funktionen och sen använda sig av dem. Vi måste dock använda oss av ett nyckel=värde par för att det ska fungera:
function frame(){                 # Standardvärdena                 $a = array(                         "color" => "#666",                         "width" => 2                 );                 # Gå igenom alla argument                 for ($i=0; $i<func_num_args(); $i++) {                         # Hämta argumentet                         $arg = func_get_arg($i);                         # Splitta på "="                         list ($tag,$val) = split('=', $arg, -1);                         # Ersätt standardvärdet                         $a[$tag] = $val;                 }                 return "                         <div style='border: {$a[width]}px solid $a[color]'>                                 $a                         </div>                 ";         }         print frame("text=Hejsan");         print frame("text=Hejsan", "color=red", "width=3");
Så, som ni ser så har funktionen inget argument alls i definitionen ("function frame(){ ... }") utan det får vi räkna ut själva. Det betyder att vi måste börja med att sätta standardvärdena i en array, här $a. Sen går vi igenom alla argument till funktionen och byter ut värdena i $a mot de som skickades med, om något skickades med. Resultatet av ovanstående kod är:
<div style='border: 2px solid #666'>Hejsan</div> <div style='border: 3px solid red'>Hejsan</div>
Mer i Tutorials
Fejka din semester fr dina vnner via MMS
Anvnd ImageMagick fr dynamiska bild
Grnssnitt fr mp3spelare
Dynamiska argument till PHP funktioner
Saturationscript fr hexfrger i PHP
S skapas sandmannets ikoner
S blir layouten p sandmannet till
Porträtt av u/elizabeeeef
Jämförelse 135 mm
Porträtt av kompis mamma
Använda utrymmet under trappen
Spelbord
Pimpning av köks-ön
Jag saknar min Dodge!
Acrylic drip
Renoverad ateljé
Nytt hemmakontor
Ny tatuering
Fågel Fenix

Vilken locksång väcker din uppmärksamhet?
Grace
I’m a lumberjack and I’m ok
Dodgen upplagd för försäljning
Gamingstol som kontorsstol
Sun and Stars
Barking up the wrong tree
Light at the end of the tunnel
Serveringsbricka
Regntunnor och grus
Pergola
Uppdatering av ikoner
Renoverat sidobord
Malin och Alex bröllop
Pizza på grillen
Myst linking book and Gehn's Inkwell
Utebord
Bord i biorummet
Mattsvart Dodge
Susann's gravidmage
Simson och Isi
Det blev en Volvo XC90
Ny bil?
Vardagsrumsbord
Altantak
Steven och Susann's bröllop
Trapprenovering
Semesterplanering

En sak jag saknat väldigt länge är en app på till exempel iPad där man kan lägga upp sina sommarplaner. Vi skriver ju givetvis upp i kalendern när vi tar semester, när det är skollov och liknande, men det trängs ju med en massa annat onödig information när man vill sätta sig ned och planera semester, ledighet, aktiviteter. Man vill gärna ha en sjysst översikt över bara det som ...
Paulig och Release Finans

Detta är helt galet. 2015 så skaffade vi en rätt så high end-espressomaskin till kontoret. En Thermoplan One. Företaget som levererade den heter Paulig och med dem skrev vi ett hyresavtal på maskinen.
Mother of Dragons
Maleficent
Bakbord
Extrabord till jul
Renoverat vardagsrumsbord
Nattduksbord
Crock Pot
PanPastel
Tron för Sigge
Road Trip Italien!
#inlineditbutton