2011-05-19 16:01 #0 av: [Fibbe]

Om vi vill använda ett värde fler gånger sparar vi värdet i en variabel. Men om vi vill utföra en uträkning fler gånger kommer inte variabler att vara det vi behöver. Vi kommer då att behöva skapa våra egna funktioner istället.

Vad är en funktion?

En funktion är ett litet miniprogram som utför en specifik uppgift. En funktion som vi kikat lite på, i första artikel i den här serien, är funktionen rand(). Denna funktion retunerar, skickar tillbaka, ett slumpmässigt tal till oss. Vi kan skapa egna sådana här funktioner.

Låt oss säga att vi väldigt ofta vill räkna ut vad 1 / 9 blir. Istället för att skriva 1 / 9 på alla ställen där uträkningen ska ske kan vi skapa en funktion att anropa istället.

Exempel:

function divide()
{
$tal1 = 1;
$tal2 = 9;

return $tal1 / $tal2;
}

Vi har definierat en funktion som heter divide. I funktionen finns 2 variabler, $tal1 och $tal2. Vi retunerar värdet av $tal1 delat på $tal2. Om vi kör koden ovan kommer dock inget att hända. Detta för att vi inte anropat funktionen någon stans, vi använder den helt enkelt inte ännu.

Så här anropar man en funktion:

$var = divide();

Vår variabel, $var, antar nu det värde som funktionen divide() retunerar via return.

Vi kan även skriva värdet direkt:

echo divide();

Ovanstående kod ger:

0.11111111111111

Observera att funktionen divide() måste finnas i samma fil som vi anropar den från. (I sista artikeln i denna serie kommer vi lära oss hur man kan dela funktioner mellan olika filer utan att behöva skriva dem fler gånger.)

Parametrar och argument

Vår divide-funktion är i nuläget ganska värdelös. Den kan enbart dividera 1 med 9. Vi vill givetvis kunna dividera vilka tal vi vill. Detta kan göras genom att lägga till parametrar i funktionen.

En parameter är en variabel, vars värde skickas till funktionen utifrån. Här är ett exempel på vår divide-funktion med 2 st parametrar, $in1 och $in2.

function divide($in1, $in2)
{
return $in1 / $in2;
}

Nu kommer funktionen att returnera värdet av $in1 delat på värdet av $in2 . För att bestämma vilka värden $in1 och $in2 ska anta så måste vi anropa vår funktion med två argument. Ett argument är något (tal, text eller dylikt) som skickas till funktionens parametrar.

Exempel:

function funktion($parameter1, $parameter2)
{
//... Gör något med parametrarna ...//
}

funktion($argument1, $argument2);

$parameter1 kommer att anta värdet av $argument1, osv med övriga parametrar.

Vi går tillbaka till vår divide-funktion. Den ska nu anropas. Den har 2 st parametrar och behöver därför 2 st argument.

Så här kan vi anropa den:

echo divide(1, 9);

Nu får första parametern värdet 1 och andra parametern värdet 9. Med andra ord får variabeln $in1 värdet 1 och variablen $in2 värdet 9. Och där med retunerar funktionen värdet av 1 / 9. Vi kan nu givetvis ändra dessa tal till vilka vi vill.

 

Icke obligatoriska parametrar

Ibland gör man funktioner som i normala fall ska fungera på ett sätt, men det ska finnas möjlighet att få funktionen att fungera på ett annat vis.

Vår divide-funktion dividerar tal1 på tal2. Vi ska nu lägga till en parameter så att vi kan ändra ordningen så att tal2 delas på tal1. Funktionen ska fungera på exakt samma sätt som tidigare, divide(1, 9) ksa retunera värdet av 1 delat på 9. Men vi vill även kunna vända på divisionen, divide(1, 9, TRUE) ska retunera värdet av 9 delat på 1.

Detta kan vi göra så här:

function divide($in1, $in2, $reverse = FALSE)
{
if ($reverse)
{
return $in2 / $in1;
}
else
{
return $in1 / $in2;
}
}

Det går alltså att bestämma i förhand vilket värde en parameter ska anta när inget argument skickas till den. Observera att anges inte detta standardvärde så är argumentet obligatoriskt. Funktionen kommer då att retunera ett felmeddelande om inte denna parameter anges.

 

Prova själv

Du får följande funktioner:

function plus ($tal1, $tal2)
{
return $tal1 + $tal2;
}

function minus ($tal1, $tal2)
{
return $tal1 - $tal2;
}

function multiplicera ($tal1, $tal2)
{
return $tal1 * $tal2;
}

function dividera ($tal1, $tal2)
{
return $tal1 / $tal2;
}

Jag vill nu ha en funktion som jag kan anropa på följande 4 sätt:

kalk(1, 2, "+");

kalk(1, 2, "-");

kalk(1, 2, "*");

kalk(1, 2, "/");

Funktionen ska retunera värdet av någon av funktionerna ovan beroende på vilken tecket den får som 3:e argument.

 

Tips och diskussion i den här tråden

 

Nästa artikel i serien »