# Kom igång med Php (5/7)
Author: [Borttaget]

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](../../discussions/4dd50e5ad4ebea3ebd001023-kom-igang-med-php#4dd2dad588f4721678015b62-1)

[Nästa artikel i serien »](http://webbprogrammering.ifokus.se/articles/4dd54fb488f472385f0018a5-kom-igang-med-php-67-#4dd2dd3cd4ebea6d7d014c80-1)
