§ 3 Functies in PHP
3.1 Functies in het algemeen
Een functie in PHP bestaat in het algemeen uit 3 verschillende onderdelen:
- De functienaam voorafgegaan door het woord function.
- Haakjes () achter de functienaam waarbinnen door een komma gescheiden argumenten kunnen voorkomen.
- De functie body omsloten door accolades {} .
Format van een functie:
function functienaam($arg1,$arg2,…,$argn){ code sectie }
Stel je maakt een website en je wilt op elke pagina een copyright afgebeeld hebben. We maken daarvoor een aparte functie aan.
function show_copyright() { print("Copyright © 2008 ENIGMA. Alle rechten voorbehouden."); }
Als je in een PHP script deze functie aanroept wordt de copyright regel afgebeeld op de plek waar de functie wordt aangeroepen. Het enige wat je moet onderhouden is het jaartal in de functie. Maar ook dat is met behulp van een ingebouwde PHP functie aan te passen. Stel dat het jaar 2009 eraan komt en je wilt vanaf nu dat je er geen omkijken meer naar hebt kun je gebruik maken van de functie date ( ). De nieuwe functie show_copyright() gaat er dan als volgt uitzien:
function show_copyright() { print("Copyright © 2007 - date("Y")ENIGMA. Alle rechten voorbehouden."); }
date("Y") geeft het jaartal weer in 4 cijfers, bijvoorbeeld 2009.
Het PHP script om deze functie te gebruiken ziet er als volgt uit:
<?php function show_copyright() { print("Copyright © 2007 - " . date("Y") . " ENIGMA . Alle rechten voorbehouden."); } show_copyright(); ?>
Als functies binnen functies gebruikt worden spreken we van het nesten van functies.
De copyright regel wordt dan als volgt op het scherm weegegeven:

Door de code show_copyright(); in elke webpagina op te nemen waar je het copyright wilt laten zien kun je dat verwezenlijken.
Het kan zijn dat je als webmaster van verschillende websites eenzelfde copyright regel wilt gebruiken. Alle websites hebben verschillende namen. Nu kun je een variabele $site_naam introduceren. Met behulp van deze variabele kun je nu elke website voorzien van een unieke copyright regel. Je geeft nu de functie show_copyright() het argument $site_naam mee.
Stel in ons geval betreft het de website www.enigma-online.nl . Dan komt het script met de functie er als volgt uit te zien:
<?php function show_copyright($site_naam) { print("Copyright © 2007 - " . date("Y") . " $site_naam. Alle rechten voorbehouden."); } $site_naam = "www.enigma-online.nl"; show_copyright($site_naam); ?>
Uitvoering van dit script levert het volgende resultaat:

3.2 Functies met een terugkeerwaarde
Vaak is het handig om functies te maken die een waarde als output geven. Dit wordt mogelijk gemaakt om bij het aanroepen van de functie een variabele een waarde toe te kennen. Het maakt niet uit welk datatype die variabele heeft; zelfs lijsten en arrays kunnen worden weergegeven.
Het volgende voorbeeld zal een en ander verduidelijken. Stel we hebben een bedrijf en we moeten de verkoopprijs van producten gaan bepalen. Daar hoort in veel gevallen het tarief van 19% BTW bij. Het zou handig zijn als we in een functie in een keer het eindbedrag voor de klant zouden kunnen bepalen.
Hoe gaan we te werk?
- Er moet een variabele $prijs en een variabele $BTW zijn.
- Er moet een functie bereken_eindprijs() gedeclareerd worden waarin de parameters $prijs en $BTW in worden opgenomen.
- Binnen de functie moet de verkoopprijs worden berekend en teruggegeven met return().
- De functie moet binnen het script worden aangeroepen.
- In een boodschap moet de variabele $verkoopprijs worden meegedeeld.
In een script ziet dat er als volgt uit:
<?php $prijs = 24.95; $btw = .19; function bereken_eindprijs($btw,$prijs) { $verkoopbelasting = $btw; return $prijs + ($prijs * $verkoopbelasting); } // Let op hoe de functie bereken_eindprijs() de waarde teruggeeft $eindprijs = bereken_eindprijs($btw,$prijs); // Rond het bedrag af op twee decimalen $eindprijs = round($eindprijs,2); print "Verkoopprijs zonder BTW = € $prijs
\n"; print "Btw-tarief = 19%
\n"; print "De eindprijs = € $eindprijs"; ?>
Het is ook mogelijk om functies met returnwaarden rechtstreeks in controlestructuren te gebruiken. Het volgende voorbeeld zal dat hopelijk duidelijk maken. Stel we willen online gaan shoppen. Maar een bepaalde webshop wordt gewerkt met een kredietlimiet. Elke keer als je iets in je winkelwagentje stopt wordt het bedrag dat je moet betalen bij de andere gekochte producten opgeteld en bovendien wordt dat totaalbedrag vergeleken met de kredietlimiet die je hebt. Het zou mooi zijn als bij de overschrijding van de limiet je gewaarschuwd wordt of als je nog kredietlimiet over hebt dat aangegeven wordt hoeveel dat is.
Dat kun je als volgt realiseren.
<?php $aankoopbedrag = 234.50; $kredietlimiet = 500.00; function check_kredietlimiet($aankoopbedrag, $kredietlimiet) { if($aankoopbedrag > $kredietlimiet) { return false; } else { return true; } } if (check_kredietlimiet($aankoopbedrag, $kredietlimiet)){ $bestedingsbedrag = number_format(($kredietlimiet - $aankoopbedrag),2); // Laat de klant rustig doorwinkelen print "Winkel gerust nog even door! <br>"; print "U bent nog € " . $bestedingsbedrag . " verwijderd van uw kredietlimiet."; } else { $overschrijding = number_format(($aankoopbedrag - $kredietlimiet),2); print "Uw aankoopbedrag overstijgt de kredietlimiet met € ". $overschrijding ."!"; } ?>
Hoe werkt de functie check_kredietlimiet() ?
De functie heeft 2 parameters: $aankoopbedrag en $kredietlimiet . Als het aankoopbedrag groter is dan de kredietlimiet geeft de functie de returnwaarde of terugkeerwaarde 0 (false). Zoniet dan is de returnwaarde 1 (true). Als de functie bij de check een 0 geeft, betekent dat dat de vergelijking $aankoopbedrag > $kredietlimiet niet klopt en dus het aankoopbedrag de kredietlimiet niet overstijgt, waardoor dus een 1 als returnwaarde moet worden weergegeven.
In Java hebben we deze constructies ook al eens gezien. We noemen dit dan geen functies maar methoden. Je hebt daar zogenaamde void-methoden zonder returnwaarde en methoden met terugkeerwaarden. (Zie ENIGMA deel 1, hoofdstuk 4)
3.3 Het onderbrengen van functies in een apart bestand
Er zijn nog meer typen functies te ontwerpen, zoals functies met meerdere returnwaarden, recursieve functies en variabele functies. Kijk daarvoor in de uitvoerige functielijst van PHP in de PHP-documentatie. Als je meerdere functies gebruikt die vaker terugkomen is het handig een zogenaamde functiebibliotheek aan te leggen. Je kunt alle gebruikte functies in één PHP bestand zetten en dat bijvoorbeeld opslaan als functions.php . Het enige wat je dan nog te doen hebt is dat bestand inladen in een PHP pagina d.m.v. de PHP functie include() .
De code om de eindprijs te berekenen zou er dan als volgt kunnen uitzien:
<?php include("functions.php"); $prijs = 24.95; $btw = .19; // Let op hoe de functie bereken_eindprijs() de waarde teruggeeft $eindprijs = bereken_eindprijs($BTW,$prijs); // Rond het bedrag af op twee decimalen $eindprijs = round($eindprijs,2); print "Verkoopprijs zonder BTW = € $prijs<br>\n"; print "Btw-tarief = 19%<br>\n"; print "De eindprijs = € $eindprijs"; ?>