3. Functies

Een functie is een blok opdrachten die onder één naam verzameld worden.

3.1. Een functie definiëren

PHP bevat meer dan 700 voorgedefinieerde functies, maar je kan ook zelf functies creëren:
function functieNaam() {
  statement(s);
}

En je gebruikt de functie door de naam ervan te vermelden: functieNaam();

Er kunnen ook parameters doorgegeven worden:
function functieNaam($param1, $param2) {
  statement(s) met $param1 en $param2;
}

Of je voorziet een terugkeerwaarde met return $waarde;

Pas op: als je in een functie een variabele uit het hoofdscript wil gebruiken, moet je dat binnen de functie expliciet vermelden: global $varNaam;

3.2. Voorgedefinieerde functies

Hieronder enkele veelgebruikte ingebouwde PHP-functies.
Een volledig overzicht vind je in de PHP Function Reference of op w3schools.com

Datum en tijd

date(format) geeft de huidige datum/tijd in een opgegeven formaat.
bv: echo date("d\/m\/Y"); geeft de huidige datum in formaat dd/mm/jjjj
bv: echo date("H\:i\:s"); geeft bv. 17:42:31
bv: echo date("w"); geeft weekdag 0 (zondag) tot 6 (zaterdag)

Math

abs(getal)geeft de absolute waarde van getal (met getal bv. 6 of -10 of 2.5)
is_nan(waarde)geeft TRUE als waarde geen getal is
max(getal1, getal2)geeft het maximum van twee getallen
min(getal1, getal2)geeft het minimum van twee getallen
pi()of de constante M_PI geven beide de waarde PI (3.14 enz)
pow(getal, exponent)geeft de exponent-ste macht van getal
mt_rand(min, max)geeft een willekeurig getal tussen min en (inclusief) max
round(getal, [n])rondt getal af, eventueel op n cijfers na de komma

String

explode("teken","tekst")maakt een array met substrings, gesplitst aan "teken"
printf(format, arg1, arg2, enz)geeft een geformatteerde string als resultaat (cf printf in Java)
bv format "%10.2f" = kommagetal van 10 posities, waarin 2 na de komma
strlen("tekst")aantal tekens in tekst
strpos("tekst","gezocht")zoekt op welke positie string "gezocht" begint in "tekst".
Niet gevonden geeft false. Eerste positie = 0
strrev("tekst")geeft het omgekeerde van "tekst"
substr("tekst",start,[aantal])geeft het tekstdeel vanaf positie start (eerste positie = 0) tot einde tekst of voor een lengte van aantal tekens
trim("tekst")verwijdert spaties aan begin en einde van de tekst; verzameling van ltrim() en rtrim()
strtolower("tekst")zet de tekst in kleine letters. Deze functie werkt niet voor karakters met accenten; dan gebruik je beter mb_strtolower("tekst","UTF-8"), al is die functie trager
strtoupper("tekst")zet de tekst in hoofdletters. Zelfde opmerking als hierboven: mb_strtoupper("tekst","UTF-8")

3.3. Include en require

Steeds terugkerende codeblokken zet je best in een apart bestand, dat je dan telkens aanroept. Zo'n codeblok kan zowel een stuk HTML-pagina als een verzameling PHP-instructies (bv. een functie) zijn.

PHP beschikt daarvoor over de commando's include en require (je kan ze ook als functies gebruiken).
Beide doen hetzelfde, alleen zorgt require ervoor dat de uitvoering stopt als er iets misloopt bij het laden van het externe bestand, terwijl include dan gewoon "overgeslagen" wordt, d.w.z. de rest van het script wordt wel uitgevoerd.

Het statement include_once() werkt net zoals include(), alleen zal het de file niet opnieuw ophalen als ze reeds eerder "included" was, de versie in het werkgeheugen wordt terug gebruikt. Hetzelfde principe geldt voor require_once().

Verder bestaat de functie readfile(bestandsNaam), die een volledig bestand (HTML, PHP, ...) ineens inleest.

3.4. Oefeningen

Oefening 1: schrijf een programma waarin de functie printBoodschap gedeclareerd wordt.
Deze functie heeft een argument $tekst en een argument $symbool dat als default waarde "" heeft.

De functie wordt twee keer aangeroepen in het programma:
printBoodschap ("test zonder kadersymbool");
printBoodschap ("test met kadersymbool", "*");

Het resultaat zie je hiernaast: voorbeeld

Oefening 2: schrijf een programma waarin de functie wisselOm gedeclareerd wordt.
Deze functie heeft twee argumenten $a en $b, deze worden pass by reference doorgegeven.
Via de functie wisselOm worden de variabelen omgewisseld.
Test de functie in het hoofdprogramma.

Oefening 3: $a = 12.32, bereken wortel en rond af op de 2e decimaal.

Oefening 4: gebruik mt_rand om 50 willekeurige kommagetallen tussen 0 en 5 te generen en af te drukken.
De kommagetallen hebben 1 cijfer na de komma. De uitvoer ziet er uit als volgt:

3.7
4.3
0.6
...

Oefening 5: druk het getal 457423 af in binaire, hexadecimale en octale vorm.

Oefening 6: druk alle posities van het plus-teken in $a af (gebruik strpos) en $a = "+5*3+4=19=1+18";