Inleiding in functies
Een functie is een manier om een blok code te verpakken en een naam te geven, zodat je het blok later in slechts één regel code kunt gebruiken. Gebruik je heel vaak dezelfde code (bijvoorbeeld om een e-mailadres te controleren, of om verbinding te leggen met een database), dan kan het handig zijn om de code te verpakken in een functie zodat je deze makkelijker kunt hergebruiken. Ook wanneer je een bepaald stuk code maar een keer gebruikt kan het nuttig zijn om dit stuk code in een functie op te nemen.
Als je meerdere functies regelmatig gebruikt in verschillende projecten, kan je deze functies concentreren in zogenaamde “functiebibliotheken” en deze functiebibliotheken insluiten in je projecten.
PHP functies
Standaard beschikt PHP, net als veel andere programmeertalen over een groot aantal ingebakken functies. Voordat je dus zelf aan de slag gaat met het maken van een functie is het verstandig om eerst te controleren of PHP al niet een functie voor je heeft.
Hieronder staan voorbeelden van het gebruik van enkele PHP functies. Voor een volledige lijst van PHP functies kijk je op http://www.php.net/manual/en/funcref.php .
<?php $text = "Hoe lang is een chinees"; // strlen() is een functie van PHP die het aantal tekens in een string telt en teruggeeft. Je kunt het resultaat er van opslaan in een andere variabele, maar je kunt ook echo strlen() doen om direct het aantal tekens te tonen. $length = strlen($text); $arr = array('appels','peren','bananen','sinaasappels'); // count() geeft het aantal waarden uit een array terug. $aantal = count($arr); // date() is een functie waarmee je op verschillende manieren de huidige tijd kunt krijgen. Op http://www.php.net/manual/en/function.date.php vind je meer informatie. echo date('H:i:s d-m-Y'); ?>
Zelf een functie maken
Zoals eerder gezegd is het mogelijk om zelf functies te maken in PHP. De basis syntax van een functie ziet er als volgt uit:
<?php function functienaam(){ // code die wordt uitgevoerd als de functie zou worden aangeroepen } // Je roept de functie met de naam functienaam als volgt aan als je hem wilt gebruiken: functienaam(); ?>
Zoals je hierboven ziet moet je een functie eerst “declareren” (=bouwen) voordat je hem later kunt gebruiken (=aanroepen). Op zich vrij logisch. Met het woord function geef je aan dat je een functie wilt bouwen.
Naam van je eigengebouwde functie
De naam van de functie is in principe vrij te kiezen, maar moet voldoen aan de volgende voorwaarden:
- Er mogen geen spaties in de functienaam zitten (wel hoofdletters, underscores)
- De functienaam mag niet hetzelfde zijn als een van php’s ingebouwde functies. date() mag je bijvoorbeeld niet gebruiken, en count() is ook al bezet.
Vervolgens komen direct na de functienaam haakjes en accollades.
Parameters waar je in je functie iets mee wilt doen
Tussen de haakjes zet je eventuele parameters (officieel argumenten genoemd) neer die de functie mag accepteren. Klinkt ingewikkeld he? Maar het valt mee. De php functies strlen() en count() accepteren elk een argument. Je kunt echter zoveel argumenten aan je functie meegeven als je maar wilt. Kijk hieronder voor een voorbeeld van een functie waarbij een voornaam en een achternaam aan elkaar worden gekoppeld en teruggegeven:
<?php function koppel_voor_en_achternaam($voornaam, $achternaam){ // Een goed gebruik is om de waarden terug te geven middels een "return". Vervolgens kan op de plek waar de functie wordt aangeroepen worden beslist wat er moet worden gedaan met wat de functie teruggeeft. return $voornaam . " " . $achternaam; } // hieronder kies ik er voor de gekoppelde voor- en achternaam op te slaan in een variabele: $fullname = koppel_voor_en_achternaam("Jaap","van der Veen"); // hieronder kies ik er voor de gekoppelde voor- en achternaam te tonen: echo koppel_voor_en_achternaam("Bart", "Feenstra"); ?>
Je ziet in bovenstaande, dat het eerste argument dat bij het aanroepen van de functie wordt meegegeven automatisch beschikbaar is als $voornaam binnen de functie. Het tweede argument wat je meegeeft zal beschikbaar zijn als $achternaam binnen de functie.
Nadat je een functie hebt gedeclareerd, kan je hem daarna, in het huidige document, zo vaak gebruiken als je maar wilt.
De scope van variabelen
Variabelen die je buiten een functie declareert, kan je binnen de functie niet aanroepen. Bekijk het volgende voorbeeld:
<?php $bar = "Hello? Is it you i'm looking for?"; function foo(){ return "I see you: " . $bar; } // onderstaande zal teruggeven "I see you: ", zonder de waarde die buiten de functie in $bar is aangegeven. $bar is niet beschikbaar binnen de functie. echo foo(); ?>
Als je een variabele binnen een functie wilt kunnen gebruiken, zal je de functie zo moeten bouwen dat deze variabelen accepteert. We gaan bovenstaande functie aanpassen zodat deze iets kan doen met een variabele die er buiten is gedeclareerd:
<?php $bar = "Hello? Is it you i'm looking for?"; function foo($str){ return "I see you: " . $str; } // onderstaande zal teruggeven "I see you: Hello? Is it you i'm looking for?", omdat we hebben aangegeven dat deze functie een argument accepteert. Nu roepen we de functie aan en geven we $bar mee aan de functie. Deze is binnen de functie beschikbaar als $str. echo foo($bar); ?>
$_POST en $_GET zijn wel beschikbaar binnen een functie
Gegevens die je verstuurd via een formulier worden opgeslagen in $_POST of $_GET (afhankelijk van de method die je in het formulier hebt aangegeven). $_POST en $_GET kunnen binnen de functie wel worden aangesproken, ongeacht of ze worden meegegeven of niet. Dat komt omdat $_POST en $_GET “globale variabelen” zijn (global variables). Deze zijn overal binnen je document beschikbaar, dus ook binnen functies.
Een functiebibliotheek aanmaken en gebruiken
Aan het begin van deze les kon je lezen dat het handig kan zijn om veelgebruikte functies met elkaar in een functiebibliotheek te zetten. Het voordeel hiervan is dat je, mocht je ooit aanpassingen willen verichten aan een functie, je dit maar op 1 plek hoeft te doen. Een functiebibliotheek is in beginsel niets anders dan een PHP bestand waarin 1 of meer functies zijn gedeclareerd. Stel dat je een bestand genaamd “functions.php” aanmaakt met daarin de volgende functies:
<?php // functie die een e-mailadres controleert. Geeft "true" terug als het e-mailadres klopt. function validate_email($input){ // try to split $input into $parts by '@' $parts = explode('@',$input); if(count($parts) === 2){ $domain = explode('.',$parts[1]); if(count($domain) > 1){ return true; }else{ return false; } }else{ // if the amount of parts is not 2... return false; } } // end validate_email() // functie die een voor en achternaam (of twee andere stukjes tekst...) aan elkaar koppelt en teruggeeft function koppel_voor_en_achternaam($voornaam, $achternaam){ // returns two parameters glued together in a new string return $voornaam . " " . $achternaam; } // end koppel_voor_en_achternaam() ?>
Stel nu dat je de functies uit de functiebibliotheek nodig hebt in een bepaald bestand, dan kan je deze functiebibliotheek als volgt koppelen:
<?php // met require_once() kan je een bestand insluiten in je PHP pagina. Pas op: Als het bestand niet kan worden gevonden, krijg je een foutmelding en werkt de rest van je code niet meer... require_once("functions.php"); // controleer een e-mailadres if(validate_email("j.a.van.der.veen@nhl.nl")){ echo "Uw e-mailadres klopt"; }else{ echo "Uw e-mailadres klopt niet."; } ?>
Voorbereidingen om succesvol te kunnen starten met les 4
Het is erg belangrijk dat je het nut van functies begrijpt. Lees de bovenstaande stof nog eens goed door en experimenteer om er achter te komen waarom iets misschien niet goed gaat.
Opdracht voor les 4
Om het behandelde van les 3 te kunnen oefenen krijg je van de docent een korte praktische opdracht. De uitwerking hier van stuur je uiterlijk een dag voor les 4 terug naar de docent.