Guide: PHP- & MySQL-innføring: Kapittel 5
Funksjoner
Programmeringsspråket PHP har blitt svært populært de siste årene. Vi fortsetter introduksjonen og tar for oss funksjoner.
Løsning
Husker du den vanlige feilen som vi nevnte på forrige side? Feilen består i at den utskrevne teksten sier at vi skal summere arealet av sirkler med radius fra 1 til og med 5, mens vi i for-løkken faktisk bare summerer arealet for sirkler fra 1 til og med 4. Det er fordi forløkken avslutter i det øyeblikket $i blir lik 5, ikke rett etterpå. Ved å endre sjekken fra < til <= vil det fungere. Prøv!
Returnere flere verdier
Det er nå det begynner å bli gøy. PHP benytter seg av lister veldig mye, så dersom du ønsker å returnere flere verdier kan du gjøre det ved å lage en liste og returnere den. Du kan også returnere objekter, som vi ennå ikke har fortalt deg om, men som vi skal behandle i et senere kapittel.
Å lage en liste er svært enkelt, og vi kan endre vår tidligere SirkelInfo til å returnere en liste i stedet for å skrive ut teksten.
<?php
function SirkelInfo($radius)
{
$info['radius'] = $radius;
$info['areal'] = $radius * $radius * 3.14;
$info['omkrets'] = $radius * 2 * 3.14;
return $info;
}
$info = SirkelInfo(3);
echo "En sirkel med radius 3 har en omkrets ".
"på $info['omkrets'] og areal på $info['areal']<br/>";
?>
Et annet alternativ er å endre som blir sendt inn som parametre. Dette er en måte som bør brukes med omhu, og fungerer best dersom du ønsker at endringene du gjør i funksjonen også skal gjelde for variabelen som du bruker når du kaller funksjonen.
Her er det vanskelig å komme med et svært godt eksempel, så vi bruker noe så primitivt som en funksjon som legger til en til en verdi.
<?php
function LeggTilEn($verdi)
{
$verdi++;
}
$ost = 4;
LeggTilEn($ost);
echo $ost;
?>
Intuitivt vil du kanskje si at dette skriptet skriver ut tallet 5, men det stemmer ikke. Vi har ikke pÃ¥ noen mÃ¥te fortalt PHP at endringer gjort til $verdi ogsÃ¥ skal gjelde for variabelen den representerer. Stilen brukt ovenfor kalles ”call by value”, som indikerer at det kun er verdien som blir sendt til funksjonen.
Om vi ønsker at endringene også skal gjelde for den nye verdien, kan vi gjøre følgende;
<?php
function LeggTilEn(&$verdi)
{
$verdi++;
}
$ost = 4;
LeggTilEn($ost);
echo $ost; // Skriver ut 5
?>
Her er det et-tegnet (&) som gjør at funksjonen kan endre variabelen som blir sendt inn til funksjonen. I stedet for at funksjonen får sin egen kopi av variabelen $ost, som er det som skjer til vanlig, får funksjonen nå en referanse til den originale variabelen. Når variabelen endres i funksjonen, vil endringen derfor også skje med den eksterne variabelen.
På engelsk kalles dette pass by reference (når du sender inn en referanse), i motsetning til pass by value, som er standard.