PHP is een van de meest gebruikte pro­gram­meer­ta­len voor server-side pro­gram­me­ren. In de loop der tijd is het een integraal onderdeel geworden van he­den­daag­se websites en in­ter­net­tech­no­lo­gie­ën. Toch kan het voor beginners een hele uitdaging zijn om PHP onder de knie te krijgen. In deze PHP-tutorial laten we je de ba­sis­prin­ci­pes van deze populaire pro­gram­meer­taal zien, evenals de be­lang­rijk­ste ope­ra­to­ren, loops en functies.

Wat je nodig hebt voordat je aan de PHP-tutorial begint

Onze tutorial is voor­na­me­lijk bedoeld voor beginners. Het kan echter nuttig zijn om enige ba­sis­ken­nis te hebben van moderne we­bont­wik­ke­ling en HTML. Om de voor­beel­den op uw eigen computer te kunnen volgen en re­pro­du­ce­ren, moet u het volgende bij de hand hebben:

  • Webserver inclusief PHP-in­ter­pre­ter
  • PHP ge­ïn­stal­leerd
  • Web­brow­ser
  • Tekst­edi­tor

Als server raden we de lokale testom­ge­ving XAMPP aan, die Apache Friends gratis aanbiedt voor Windows-, Linux- en macOS-be­stu­rings­sys­te­men. XAMPP is een pure test­ser­ver. We­bont­wik­ke­laars kunnen de software gebruiken om eenvoudig testom­ge­vin­gen voor scripts, HTML-pagina’s en sty­les­heets op te zetten. Een veilige werking van de webserver op het internet is echter niet ge­ga­ran­deerd. Ge­de­tail­leer­de in­stal­la­tie-in­struc­ties vindt u in onze XAMPP-tutorial.

Wat is de syntaxis van PHP?

Zodra u uw lokale webserver hebt ingesteld (bij­voor­beeld met XAMPP), is het een goed idee om te testen of PHP correct is ge­ïn­stal­leerd en klaar is om scripts uit te voeren. Een script is een programma dat niet is ge­com­pi­leerd tot binaire code. In plaats daarvan worden ze uit­ge­voerd door een in­ter­pre­ter. Open uw favoriete tekst­edi­tor en pas het volgende PHP-script toe:

<?php
phpinfo();
?>
php
Afbeelding: PHP code in text editor
A text editor like Notepad++ supports pro­gram­ming with syntax high­ligh­ting.

PHP-scripts volgen een spe­ci­fie­ke structuur. De openings-PHP-tag <?php starteen scrip­tom­ge­ving*. Deze wordt gevolgd door de ei­gen­lij­ke PHP-code in de vorm van sta­te­ments. In het bo­ven­staan­de voorbeeld is dit de aanroep vande func­tiephp­in­fo*(). De meeste PHP-functies vereisen een of meer pa­ra­me­ters, die tussen haakjes staan. Voorphp­in­fo () zijn deze pa­ra­me­ters optioneel:phpinfo(INFO_ALL). Elke in­struc­tie eindigt met een puntkomma (;). Om het script af te sluiten, gebruikt u de af­slui­ten­de PHP-tag:?>.

Definitie

Functies zijn sub­rou­ti­nes waarmee delen van pro­gram­ma­co­de kunnen worden uit­be­steed. Om herhaling te voorkomen, kunnen te­rug­ke­ren­de taken eenmalig als functie worden ge­de­fi­ni­eerd en ver­vol­gens met een func­tie­naam worden aan­ge­roe­pen. We­bont­wik­ke­laars gebruiken hiervoor vooraf ge­de­fi­ni­eer­de PHP-functies of maken hun eigen sub­rou­ti­nes.

Sla het tekst­be­stand op onder de naam test in het .php-formaat (PHP-script) en start uw webserver. Als u de testom­ge­ving XAMPP gebruikt, sla test.php dan op in de XAMPP-map onder htdocs (C:\xampp\htdocs).

U kunt het voor­beeld­be­stand openen via de volgende URL in de web­brow­ser: http://localhost/test.php. Als u een andere webserver of een in­di­vi­du­e­le con­fi­gu­ra­tie van de XAMPP-software gebruikt, selecteer dan de URL op basis van het be­tref­fen­de be­stands­pad.

Wanneer u de URL http://localhost/test.php invoert, vraagt u de web­brow­ser om het bestand test.php op te halen van de webserver. De Apache HTTP Server (of het type web­ser­ver­soft­wa­re dat u gebruikt) haalt het bestand op uit de juiste map. De extensie .php geeft aan dat het bestand PHP-code bevat. Op dit moment wordt de PHP-in­ter­pre­ter die in de webserver is ge­ïn­te­greerd, actief. Deze verwerkt het document en komt daarbij de openings-PHP-tag <?php tegen, die het begin van PHP-code aangeeft. De in­ter­pre­ter gaat verder met het uitvoeren van de PHP-code en genereert HTML-uitvoer die de webserver naar de web­brow­ser verzendt voor weergave. Als PHP correct is ge­ïn­stal­leerd, re­sul­teert de uit­voe­ring van het script in de volgende webpagina:

Afbeelding: The PHP function phpinfo()
When a script is executed using the *phpinfo()* function, the browser displays in­for­ma­ti­on about the PHP con­fi­gu­ra­ti­on.

De functie phpinfo() is een afkorting voor de standaard phpinfo( INFO_ALL ). Deze functie geeft ge­de­tail­leer­de in­for­ma­tie weer over de PHP-con­fi­gu­ra­tie van uw webserver. Als er geen PHP-versie kan worden gevonden, geeft de web­brow­ser een fout­mel­ding weer of levert de PHP-code aan de browser zonder deze te in­ter­pre­te­ren.

“Hallo wereld!” – Hoe tekst weergeven met echo

Nadat je PHP met succes hebt ge­ïn­stal­leerd, is het tijd om je eerste script te schrijven. Je kunt hiervoor PHP echo gebruiken. In te­gen­stel­ling tot phpinfo() is echo geen functie. Het is eerder een taal­con­struc­tie waarmee een volgende te­ken­reeks als tekst kan worden weer­ge­ge­ven.

Definitie

Taal­con­struc­ties zijn in­struc­ties die in PHP worden gebruikt om de pro­gram­ma­stroom te regelen. Naast echo omvatten taal­con­struc­ties in­struc­ties zoals if, for, do, include, return, exit of the. In te­gen­stel­ling tot functies zijn er geen haakjes nodig.

Maak voor uw eerste aan­ge­pas­te script een nieuw PHP-bestand aan en voer de volgende code in:

<?php
echo 'Hello World!';
?>
php

De ope­ningstag <?php start een scrip­tom­ge­ving. Deze wordt gevolgd door de taal­con­struc­tie echo en de te­ken­reeks Hello World!, die tussen enkele aan­ha­lings­te­kens staat. Gebruik de tag ?> om het script te be­ëin­di­gen. Let op de puntkomma na de in­struc­tie. In plaats van Hello World! kan elke tekst worden gebruikt.

Sla het script op als hello.php in de map htdocs op uw webserver. Open ver­vol­gens het bestand via de URL http://localhost/hello.php in uw web­brow­ser. Als de code correct is over­ge­bracht, zou het brow­ser­ven­ster de door u gebruikte te­ken­reeks moeten weergeven:

Afbeelding: Text output with language construct echo
The language construct *echo* instructs the web server to output the string *Hello World!*

Elke tekst die u met echo genereert, kan naar behoefte HTML-tags bevatten. Deze tags worden door de web­brow­ser ge­ïn­ter­pre­teerd in over­een­stem­ming met de HTML-spe­ci­fi­ca­ties. Ex­pe­ri­men­teer met dit concept door bij­voor­beeld het volgende script te gebruiken:

<?php
echo '<h1>Hello World!</h1>
<p>This is my first PHP page.</p>';
?>
php

Wanneer het script in de web­brow­ser wordt aan­ge­roe­pen, wordt het resultaat van de uit­voe­ring als volgt weer­ge­ge­ven.

Afbeelding: Result of script execution with HTML tags
If the result of the script execution contains HTML tags, they’ll au­to­ma­ti­cally be in­ter­pre­ted by the web browser.

De tekst Hello World!, die tussen <h1> tags staat, wordt door de web­brow­ser ge­ïn­ter­pre­teerd als een primaire kop. Deze wordt gevolgd door een au­to­ma­ti­sche re­ge­lein­de en de tekst­pa­ra­graaf tussen de <p> tags.

Af­han­ke­lijk van uw vereisten kunt u echo gebruiken met enkele aan­ha­lings­te­kens () of dubbele aan­ha­lings­te­kens (). Als u alleen tekst uitvoert, maakt de keuze van de aan­ha­lings­te­kens niet uit. Dit on­der­scheid wordt echter be­lang­rijk bij het werken met PHP-va­ri­a­be­len.

Va­ri­a­be­len

De echo-taal­con­struc­tie biedt meer dan alleen tekst­weer­ga­ve. Tekst­pre­sen­ta­tie kan al effectief worden ge­re­a­li­seerd met HTML. Het echte voordeel van het gebruik van de PHP echo-taal­con­struc­tie ligt in de mo­ge­lijk­heid om dynamisch tekst te pro­du­ce­ren met behulp van va­ri­a­be­len.

PHP-ge­brui­kers komen vaak va­ri­a­be­len tegen in de volgende indeling: $example

Elke variabele bestaat uit een dol­lar­te­ken ($) gevolgd door de naam van de variabele. Va­ri­a­be­len worden binnen PHP-scripts gebruikt om externe gegevens in webpagina’s op te nemen. Ze kunnen ver­schil­len­de soorten waarden bevatten, variërend van een­vou­di­ge getallen en te­ken­reek­sen tot volledige teksten of HTML-do­cu­ment­struc­tu­ren. PHP maakt on­der­scheid tussen zeven ver­schil­len­de variabele typen:

Variabel type Be­schrij­ving
Te­ken­reeks Een string is een reeks tekens. Het kan een woord, een zin, een stuk tekst of zelfs de volledige HTML-code van een webpagina ver­te­gen­woor­di­gen.
Geheel getal Een geheel getal is een getal zonder decimalen. Dit kan positief of negatief zijn.
Float Een float is een drijvende-kom­ma­ge­tal. Dit is een numerieke waarde met decimalen. PHP on­der­steunt maximaal 14 cijfers achter de komma.
Boolean Boole­aan­se va­ri­a­be­len zijn het resultaat van een logische bewerking en kennen slechts twee waarden: TRUE (waar) en FALSE (onwaar). Dit type variabele wordt gebruikt bij het werken met voor­waar­den.
Array Een array is een variabele die meerdere elementen kan bevatten. Het is een groep van meerdere gelijk ge­struc­tu­reer­de gegevens die zijn ge­com­bi­neerd in een array.
Object Met het variabele type object kunnen pro­gram­meurs hun eigen ge­ge­vens­ty­pen de­fi­ni­ë­ren. Het wordt gebruikt in ob­ject­ge­o­ri­ën­teerd pro­gram­me­ren. We hebben ob­ject­va­ri­a­be­len opgenomen in deze PHP-tutorial.
NULL De waarde NULL staat voor een variabele zonder waarde. Voor va­ri­a­be­len van dit type is NULL de enige mogelijke waarde.

Con­tent­cen­tra­li­sa­tie wordt doorgaans beheerd via da­ta­ba­se­sys­te­men. Niettemin kunnen variabele waarden ook recht­streeks in het script worden toe­ge­we­zen. Dit type toe­wij­zing maakt gebruik van het volgende patroon:

$example = "value";
php

Het dol­lar­te­ken wordt gevolgd door de va­ri­a­be­le­naam (in dit geval example). Deze wordt met een ge­lijk­te­ken (=) gekoppeld aan een waarde tussen dubbele aan­ha­lings­te­kens. Variabele waarden van het type integer en float worden zonder aan­ha­lings­te­kens ge­schre­ven (bij­voor­beeld $example = 24;en $example= 2.7;).

PHP biedt flexi­bi­li­teit bij het benoemen van va­ri­a­be­len. Er gelden echter bepaalde be­per­kin­gen:

  • Elke variabele begint met een dol­lar­te­ken.
  • Een va­ri­a­be­le­naam is een wil­le­keu­ri­ge reeks letters, cijfers en on­der­stre­pings­te­kens (bij­voor­beeld $voorbeeld_1).
  • Een geldige va­ri­a­be­le­naam begint altijd met een letter of een on­der­stre­pings­te­ken ($voorbeeld1 of $_voorbeeld), nooit met een cijfer (fout: $1voorbeeld).
  • PHP is hoofd­let­ter­ge­voe­lig. De script­taal maakt on­der­scheid tussen hoofd­let­ters en kleine letters ($voorbeeld ≠ $Voorbeeld).
  • De va­ri­a­be­le­naam mag geen spaties of re­ge­lein­den bevatten (fout: $voorbeeld 1).
  • Strings die door PHP voor andere doel­ein­den zijn ge­re­ser­veerd, kunnen niet als door de gebruiker ge­de­fi­ni­eer­de va­ri­a­be­len worden gebruikt (bij­voor­beeld*$this*).

Laten we dit il­lu­stre­ren met een voorbeeld:

<?php
$author = "John Doe";
echo "<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author.</p>";
?>
php

De openings-PHP-tag wordt gevolgd door de definitie van de variabele. In dit geval krijgt $author de waarde John Doe toe­ge­we­zen. Bij uit­voe­ring van het script wordt elke instantie van de variabele $author in het script vervangen door de waarde John Doe in de scrip­tom­ge­ving. Een visuele weergave van dit proces in de web­brow­ser wordt ge­ïl­lu­streerd in het volgende diagram:

Afbeelding: Dynamic text generation with variables
As a result of script execution, the variable $author was assigned the value John Doe

Als de webpagina moet worden toe­ge­schre­ven aan Max Mus­ter­mann, de Duitse collega van John Doe, en niet aan John Doe, kunt u dit cor­ri­ge­ren door de variabele $author te wijzigen.

Afbeelding: Variables are used to create web pages dynamically
For the variable $author, the value Max Mus­ter­mann is used.

Dit is vooral efficiënt als een variabele meerdere keren in een script voorkomt. In dat geval hoeft er maar op één plek een correctie te worden aan­ge­bracht. Namelijk daar waar de waarde van de variabele wordt ge­de­fi­ni­eerd.

Dit il­lu­streert de kracht van PHP: inhoud kan worden ingebed met behulp van va­ri­a­be­len. Deze ei­gen­schap vormt de basis van dy­na­mi­sche we­bont­wik­ke­ling. In te­gen­stel­ling tot statische webpagina’s, die bestaan als vooraf ge­ren­der­de HTML-pagina’s, worden dy­na­mi­sche webpagina’s alleen ge­ge­ne­reerd wanneer de pagina wordt geopend. De PHP-in­ter­pre­ter haalt ver­schil­len­de elementen van de op­ge­vraag­de webpagina uit ver­schil­len­de databases op via va­ri­a­be­len en com­pi­leert deze tot een op maat gemaakte HTML-pagina die aansluit bij de spe­ci­fie­ke aanvraag.

De voordelen van deze aanpak zijn duidelijk. Wanneer elementen van de website (bij­voor­beeld in de voettekst) worden gewijzigd, is het niet nodig om elke af­zon­der­lij­ke subpagina handmatig aan te passen. Het volstaat om de over­een­kom­sti­ge ver­mel­ding in de database bij te werken. Als gevolg daarvan worden de wij­zi­gin­gen au­to­ma­tisch toegepast op alle webpagina’s die de be­tref­fen­de gegevens als va­ri­a­be­len bevatten. Als een variabele meerdere keren in een script wordt ge­de­fi­ni­eerd, over­schrijft de nieuwe definitie de vorige. Een volgende echo geeft altijd de huidige waarde van een variabele weer.

<?php
$author = "John Doe";
echo "<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author.</p>";
$author = "Max Mustermann";
echo " <p>Supported by $author.</p>";
?>
php
Afbeelding: Overwriting variables
The value John Doe is over­w­rit­ten with the value Max Mus­ter­mann

In het co­de­voor­beeld werd aan de variabele $author eerst de waarde John Doe toegekend en ver­vol­gens vervangen door de waarde Max Mus­ter­mann.

Nu naar het onderwerp aan­ha­lings­te­kens. In te­gen­stel­ling tot strings hoeven enkele va­ri­a­be­len niet tussen aan­ha­lings­te­kens te staan:

<?php
$author = "John Doe";
echo $author;
?>
php

Behalve wanneer de variabele binnen een string moet worden gebruikt. Gebruik in dat geval dubbele aan­ha­lings­te­kens (). Dit geeft de PHP-in­ter­pre­ter de opdracht om de string te scannen op va­ri­a­be­len en deze indien nodig te vervangen door de bij­be­ho­ren­de waarden. Strings tussen enkele aan­ha­lings­te­kens () worden ge­ïn­ter­pre­teerd en weer­ge­ge­ven als gewone tek­st­in­for­ma­tie, zelfs wanneer ze va­ri­a­be­len bevatten.

<?php
$author = "John Doe";
echo '<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author.</p>';
?>
php
Afbeelding: Plain text output with single quotes
Single quotes result in plain text output. Variables are not in­ter­pre­ted.

Je vraagt je nu misschien af wat er gebeurt als je de aan­ha­lings­te­kens helemaal weglaat. In dat geval wijst PHP op een syn­tac­ti­sche fout.

Fout­mel­din­gen en maskering

Als er syn­tac­ti­sche fouten optreden, is er geen geldige PHP-code en geeft de PHP-in­ter­pre­ter een fout­mel­ding. Dit kan bij­voor­beeld gebeuren als u de echo-in­struc­tie gebruikt met een te­ken­reeks zonder aan­ha­lings­te­kens:

<?php
echo Hello World!;
?>
php

Fout­mel­din­gen bevatten in de meeste gevallen in­for­ma­tie over waar een fout is op­ge­tre­den, wat be­lang­rij­ke in­for­ma­tie oplevert voor het verhelpen ervan.

Afbeelding: Error message from web browser: Parse error
An error message indicates syn­tac­ti­cal errors in the program code.

In het huidige voorbeeld wordt een fout vermoed in regel 2 van onze pro­gram­ma­co­de. Dit is precies waar we de aan­ha­lings­te­kens hebben weg­ge­la­ten.

Syn­tac­ti­sche fouten treden ook op wanneer u tekens wilt uitvoeren als tekst die gekoppeld zijn aan een spe­ci­fie­ke taak in PHP. Een voorbeeld hiervan is het aan­ha­lings­te­ken (). Tekens zoals deze kunnen alleen als tekst worden uit­ge­voerd in PHP als u aan de in­ter­pre­ter aangeeft dat de inherente functie van het teken is ge­neu­tra­li­seerd. In het geval van enkele aan­ha­lings­te­kens zijn er twee manieren om dit te doen. U kunt een string tussen enkele aan­ha­lings­te­kens tussen dubbele aan­ha­lings­te­kens plaatsen, of u kunt de aan­ha­lings­te­kens maskeren met een voor­af­gaan­de backslash (\):

<?php
echo '\'Hello World!\' ';
?>
php
Afbeelding: The backslash as a masking character
If charac­ters are masked with a backslash, they are stripped of their function in the PHP syntax.

Het com­bi­ne­ren van enkele en dubbele aan­ha­lings­te­kens is ook een haalbare aanpak:

<?php
echo " 'Hello World!' ";
?>
php

Maar niet deze spelling:

<?php
echo ' 'Hello World!' ';
?>
php

De spaties tussen de aan­ha­lings­te­kens zijn in de voor­beel­den toe­ge­voegd omwille van de lees­baar­heid.

Aan­een­scha­ke­ling­ope­ra­to­ren

Om meerdere va­ri­a­be­len te­ge­lij­ker­tijd binnen een PHP-script uit te voeren, kun je ge­bruik­ma­ken van wat je tot nu toe hebt geleerd en het volgende doen:

<?php
$author1 = "John Doe";
$author2 = "Max Mustermann";
echo "<h1>Hello World!</h1> 
<p>This dynamic web page was created by $author1 and $author2.</p>";
?>
php

Schrijf beide va­ri­a­be­len gewoon in de dubbele aan­ha­lings­te­kens samen met de rest van de tekst die moet worden weer­ge­ge­ven. PHP herkent de va­ri­a­be­len au­to­ma­tisch aan het dol­lar­te­ken ($) en voegt de juiste waarden in.

Afbeelding: Text output with two variables
Variables in the string are only accepted by PHP if the script does not contain functions.

Onder pro­gram­meurs wordt deze procedure echter als onzuiver beschouwd. Er is een pro­gram­meer­re­gel die stelt dat va­ri­a­be­len geen deel mogen uitmaken van de string. Een van de redenen hiervoor is dat veel pro­gram­meer­ta­len deze scheiding vereisen. Be­lang­rij­ker nog is dat PHP ook vereist dat je strings en va­ri­a­be­len scheidt wanneer je werkt met func­tie­aan­roe­pen of com­plexe­re va­ri­a­be­len. Daarom is het het beste om ze ook in platte tekst­uit­voer ge­schei­den te houden, zelfs als dat in dit geval niet echt nodig is.

Wanneer u met va­ri­a­be­len werkt, krijgt u altijd te maken met ver­schil­len­de elementen die tijdens de uitvoer aan elkaar moeten worden gekoppeld. In PHP wordt hiervoor de kop­pel­te­ken­ope­ra­tor (.) gebruikt. Als de code voor het bo­ven­staan­de voorbeeld ‘netjes’ is ge­pro­gram­meerd, zou deze er als volgt uit moeten zien:

<?php
$author1 = "John Doe";
$author2 = "Max Mustermann";
echo '<h1>Hello World!</h1> 
<p>This dynamic web page was created by ' . $author1 . ' and ' . $author2 . '.</p>';
?>
php
Afbeelding: Connecting strings and variables with concatenation operators
Con­ca­tena­ti­on operators connect strings and variables

Hier hebben we te maken met drie strings en twee va­ri­a­be­len die zijn sa­men­ge­voegd tot één string.

String1 Variabele1 String2 Variabele2 String3
’<h1>Hallo wereld!</h1> <p>Deze dy­na­mi­sche webpagina is gemaakt door ’ . $auteur1 . ’ en ’ . $auteur2 . ’.</p>’

Het is be­lang­rijk om te vermelden dat een con­ca­tena­tie­ope­ra­tor strings of va­ri­a­be­len sa­men­voegt zonder spaties toe te voegen. Als een spatie bedoeld is, moet deze expliciet worden opgenomen tussen de aan­ha­lings­te­kens binnen de string, zoals in het voorbeeld wordt getoond.

Pro­gram­meurs gebruiken de con­ca­tena­tie-operator niet alleen om strings en va­ri­a­be­len te com­bi­ne­ren voor tekstuele uitvoer, maar ook om va­ri­a­be­len uit te breiden. Het volgende voorbeeld il­lu­streert hoe dit wordt gedaan:

<?php
$example = 'Hello ';
$ example .= 'World';
echo $ example;
?>
php

Om de waarde van een variabele uit te breiden, definieer je deze opnieuw, maar plaats je de con­ca­tena­tie-operator punt (.) voor het ge­lijk­heids­te­ken. Dit is de ge­brui­ke­lij­ke verkorte notatie voor $example = $example . ‘world’.

PHP voegt de nieuwe waarde toe aan de eerder ge­de­fi­ni­eer­de waarde. Als u een spatie tussen de twee waarden wilt, schrijf deze dan aan het einde van de eerste te­ken­reeks, zoals in het voorbeeld.

Afbeelding: Extending the value of a variable
The string Hello has been extended to Hello World

PHP in HTML insluiten

In principe is de PHP-in­ter­pre­ter alleen ge­ïn­te­res­seerd in code die zich tussen een openings- en een sluitings-PHP-tag bevindt:

<?php [This section is parsed by the PHP interpreter] ?>

De in­ter­pre­ter negeert alle res­te­ren­de delen van het document en stuurt ze zonder wij­zi­gin­gen door naar de webserver. Hierdoor kan PHP-code naadloos worden ge­ïn­te­greerd in HTML-do­cu­men­ten wanneer dat nodig is, bij­voor­beeld bij het maken van sjablonen voor con­tent­ma­na­ge­ment­sys­te­men. Het is van cruciaal belang om HTML-do­cu­men­ten met PHP-code op te slaan met de PHP-be­stands­ex­ten­sie. Anders wordt het document recht­streeks aan de web­brow­ser ge­pre­sen­teerd zonder dat het door de PHP-in­ter­pre­ter wordt voor­be­werkt. In dat geval zou de code als tekst op de website zichtbaar zijn.

Je kunt de PHP-in­ter­pre­ter zien als de luie collega van de webserver, die alleen werkt wanneer hij daar expliciet om wordt gevraagd, bij­voor­beeld door een openings-PHP-tag.

Om HTML en PHP te com­bi­ne­ren, schrijf je je HTML-pagina in de klassieke do­cu­ment­struc­tuur en sla je deze op onder de be­stands­ex­ten­sie .php:

<html lang="de">
    <head>
        <meta charset="utf-8">
        <title>My first PHP page</title>
    </head>
        <body>
    <h1>Hello World</h1>
    <p>What is the current time and date?</p>
    </body>
</html>
html

Voeg nu een PHP-script toe aan uw HTML-document. Zorg ervoor dat alle code binnen de PHP-tags staat.

<html lang="de">
    <head>
        <meta charset="utf-8">
        <title>My first PHP page</title>
    </head>
    <body>
    <h1>Hello World</h1>
    <p>What is the current time and date?</p>
    <p>Your current time and date is: 
    <?php 
    echo date("d.m.Y H:i:s");
    ?>.</p>
    </body>
</html>
html

In dit geval hebben we de taal­con­struc­tie echo sa­men­ge­voegd met de PHP-functie date() om de huidige datum en tijd als server-side tekst weer te geven. De parameter van de functie geeft het gewenste formaat aan, weer­ge­ge­ven als een te­ken­reeks:

d.m.Y H:i:s = dag.maand.jaar uur:minuut:seconde.

Wanneer een web­brow­ser een dergelijk bestand opvraagt, voert de PHP-in­ter­pre­ter eerst het script uit en voegt daarbij de huidige tijd als tekst in het HTML-document in. Ver­vol­gens verzendt de webserver dit document, dat ver­vol­gens in de browser als webpagina wordt weer­ge­ge­ven.

Afbeelding: Integration of PHP in HTML
The HTML document contains an in­te­gra­ted PHP script that outputs the current date including time.

PHP-com­men­taar­func­tie

Net als bij HTML-code kunt u ook op­mer­kin­gen ach­ter­la­ten in uw PHP-code. Op­mer­kin­gen in de broncode worden door de PHP-in­ter­pre­ter genegeerd, zolang ze maar aan de syn­taxis­re­gels voldoen. PHP biedt drie ver­schil­len­de methoden voor het plaatsen van op­mer­kin­gen.

Om een hele regel als opmerking aan te duiden en deze daarmee uit te sluiten van in­ter­pre­ta­tie, kunt u ofwel de hashtag (#) of twee op­een­vol­gen­de schuine strepen (//) gebruiken. Beide opties worden gebruikt in het volgende co­de­voor­beeld:

<?php
#This is a single-line comment!
echo '<h1>Hello World!</h1>
<p>This is my first PHP page.</p>';
//This is also a single-line comment!
?>
php

De tekst­ver­wer­ker Notepad++ markeert op­mer­kin­gen in het groen. In te­gen­stel­ling tot HTML-op­mer­kin­gen komen tekst­ge­deel­ten die binnen de scrip­tom­ge­ving als op­mer­kin­gen zijn ge­mar­keerd, niet in de web­brow­ser terecht. Dit verschil ontstaat omdat de PHP-in­ter­pre­ter ze tijdens de uit­voe­ring van het script al negeert.

Afbeelding: Single-line comments
Lines marked as comments are not visible in the output.

Daarnaast kunt u op­mer­kin­gen invoegen die meerdere regels beslaan. Om dit te doen, markeert u het begin van een opmerking met een schuine streep gevolgd door een asterisk (/*) en het einde met een asterisk gevolgd door een schuine streep (*/).

<?php
/*
This is a multiple-line comment block
that spans over multiple
lines
*/
echo '<h1>Hello World!</h1>
<p>This is my first PHP page.</p>';
?>
php

Der­ge­lij­ke op­mer­kin­gen worden niet ge­par­seerd en ver­schij­nen niet op de website.

Afbeelding: Example of a multiline comment
The multiline comment is not visible in the output.

Pro­gram­meurs gebruiken op­mer­kin­gen om de broncode van hun scripts te struc­tu­re­ren, notities achter te laten voor latere be­wer­kin­gen of interne in­for­ma­tie toe te voegen aan de build, zoals de auteur of datum. Op­mer­kin­gen zijn optioneel en moeten spaarzaam worden gebruikt om de lees­baar­heid van de broncode te waar­bor­gen.

Reken met va­ri­a­be­len

In onze PHP-tutorial heb je al ken­nis­ge­maakt met va­ri­a­be­len, die voor­na­me­lijk string­waar­den bevatten. Laten we nu eens kijken naar va­ri­a­be­len die gehele getallen of drijvende-kom­ma­ge­tal­len ver­te­gen­woor­di­gen. Wanneer va­ri­a­be­len numerieke waarden bevatten, kun je er in PHP be­re­ke­nin­gen mee uitvoeren. Laten we beginnen met het optellen van twee gehele getallen:

<?php
$number1 = 237;
$number2 = 148;
$result = $number1 + $number2;
echo "result: " . $result;
?>
php

Eerst wijzen we de gehele getallen 237 en 148 toe aan de va­ri­a­be­len $number1 en $number2 en de­fi­ni­ë­ren we ver­vol­gens de variabele $result. Deze wordt gebruikt om de som van de va­ri­a­be­len $number1 en $number2 op te slaan. Voor deze bewerking gebruiken we de re­ken­kun­di­ge operator +(plus). Ten slotte geven we de som weer als tekst met behulp vande echo-taal­con­struc­tie. Merk op dat u geen aan­ha­lings­te­kens hoeft te gebruiken wanneer u numerieke waarden toewijst aan va­ri­a­be­len.

Afbeelding: Addition of integers using a PHP script
The result of the addition is output as text in the web browser.

Het volgende co­de­voor­beeld toont een selectie van wis­kun­di­ge be­re­ke­nin­gen die server-side met PHP kunnen worden uit­ge­voerd. De gebruikte PHP-ope­ra­to­ren komen gro­ten­deels overeen met standaard wis­kun­di­ge symbolen.

Re­ken­kun­di­ge operator Operatie Resultaat
$getal1 + $getal2 Optelling Som van $getal1 en $getal2
$getal1 - $getal2 Aftrekken Verschil tussen $getal1 en $getal2
$getal1 *$getal2 Ver­me­nig­vul­di­ging Product van $getal1 en $getal2
$getal1 / $getal2 Delen Quotiënt van $getal1 en $getal2
$getal1 **$getal2 Macht $getal2-de macht van $getal1
<?php
$number1 = 10;
$number2 = 5;
$addition = $number1 + $number2; //addition
$subtraction = $number1 - $number2; //subtraction
$multiplication = $number1 * $number2; //multiplication
$division = $number1 / $number2; //division
$power = $number1 ** $number2; //power
?>
php
<?php 
echo "Result of addition: " . $addition ."<br />"; 
echo "Result of subtraction: " . $subtraction . "<br />"; 
echo "Result of multiplication: " . $multiplication . "<br />";
echo "Result of division: " . $division . "<br />";
echo "10 to the 5th power (10^5): " . $power . "<br />";
echo "root of 81: " . sqrt(81) . "<br />";
?>
php
Afbeelding: Calculating with variables
Arith­me­tic ope­ra­ti­ons at a glance

Voor complexe be­re­ke­nin­gen kunnen ver­schil­len­de re­ken­kun­di­ge be­wer­kin­gen in één script worden ge­com­bi­neerd:

<?php
$number1 = 10;
$number2 = 5;
$result = 2 *$number1 + 5* $number2 - 3 * sqrt(81);
echo "Result: " . $result; 
?>
php

De PHP-in­ter­pre­ter bepaalt de waarden van de va­ri­a­be­len en berekent:

2 *10 + 5* 5 - 3 * √81 = 20 + 25 - 27 = 18

De functie sqrt() berekent de vier­kants­wor­tel van de parameter tussen haakjes. De klassieke rangorde van ope­ra­to­ren in de wiskunde is van toe­pas­sing: punt voor streepje. De in­struc­tie echo geeft het resultaat weer als een te­ken­reeks voor de web­brow­ser.

Afbeelding: Mathematical calculation with two variables and different arithmetic operators
PHP follows the dot-before-dash rule.

PHP evalueert ook eerst termen tussen haakjes. Deze keer gaan we werken met drijvende-kom­ma­ge­tal­len:

<?php
$number1 = 2.5;
$number2 = 3.7;
$result = 2 *($number1 + 5)* ($number2 - 3) * sqrt(81);
echo "Result: " . $result; 
?>
php
Afbeelding: Calculation with floating point numbers and bracketed terms
PHP cal­cu­la­ti­on with the result 94.5

Net als alle gangbare pro­gram­meer­ta­len biedt PHP operators waarmee numerieke waarden met de waarde 1 kunnen worden verhoogd of verlaagd. Er wordt on­der­scheid gemaakt tussen de pre-in­cre­mentope­ra­tor, de pre-de­cre­mentope­ra­tor, de post-in­cre­mentope­ra­tor en de post-de­cre­mentope­ra­tor.

Bediening Operator Resultaat
Pre-increment ++$number De operator ++ verhoogt de waarde van de variabele $number. De waarde wordt met 1 verhoogd. Het resultaat wordt te­rug­ge­ge­ven als de nieuwe waarde van $number.
Pre-decrement –$number De operator verlaagt de waarde van de variabele $number. Dit verlaagt de waarde met 1. Het resultaat wordt te­rug­ge­ge­ven als de nieuwe waarde van $number.
Post-increment $number++ De huidige waarde van $number wordt eerst ge­re­tour­neerd en ver­vol­gens met 1 verhoogd.
Post-decrement $number– De huidige waarde van $number wordt eerst ge­re­tour­neerd en ver­vol­gens met de waarde 1 verlaagd.

Eerst laten we zien hoe je re­ken­kun­di­ge be­wer­kin­gen kunt uitvoeren met increment- en decrement-ope­ra­to­ren aan de hand van een voorbeeld met pre-increment. Het volgende script verhoogt de waarde van de variabele $number met 1, slaat de nieuwe waarde op in de variabele $result en geeft ver­vol­gens de waarde weer als een string:

<?php
$number = 0;
$result = ++$number;
echo "Result: " . $result;
?>
php

Als je de waarde 0 met 1 verhoogt, krijg je het resultaat 1.

Afbeelding: Pre-increment the number 0
The ++ operator in­cre­ments 0 by the value 1.

Om de pre-decrement van de variabele $number te berekenen, gebruiken we dezelfde scripts, maar vervangen we de pre-increment operator (++) door de pre-decrement operator ():

<?php
$number = 0;
$result = --$number;
echo "Result: " . $result;
?>
php

Hier verlagen we de waarde 0 van de variabele $number en krijgen we het resultaat -1.

Afbeelding: Pre-decrement the number 0
The operator -- de­cre­ments the number 0 by the value 1

Een stijging voor en na de uitvoer (pre- vs. post-…) van een waarde kan worden aan­ge­toond met het volgende script:

<?php
$x = 0;
echo '<p>result: ' . ++$x;
echo '<br>x has the value ' . $x;
echo '<p>result: ' . $x++;
echo '<br>x has the value ' . $x, '</p>';
?>
php

In beide gevallen krijgen we hetzelfde resultaat. Bij pre-increment wordt de waarde van x verhoogd vóór de uitvoer in regel 3, terwijl bij post-increment deze wordt verhoogd na de uitvoer in regel 5.

Afbeelding: The difference between pre- and post-incrementations
Pre- and post-in­cre­men­ta­ti­ons in com­pa­ri­son

Hoe gebruik je de su­per­glo­bals $_GET en $_POST?

Je bent nu bekend met de ba­sis­prin­ci­pes van PHP. Je kunt werken met va­ri­a­be­len, sa­men­voe­gen en be­re­ke­nin­gen uitvoeren. Ver­vol­gens zullen we de cruciale rol van va­ri­a­be­len in scripting il­lu­stre­ren.

Een be­lang­rij­ke functie van script­ta­len is hun vermogen om ge­brui­kers­in­voer te evalueren en de waarden naar een ander script over te dragen. PHP maakt voor ge­ge­vens­over­dracht gebruik van de su­per­glo­bals $_GET en$_POST, vooraf ge­de­fi­ni­eer­de sys­teem­va­ri­a­be­len diein alle scopesbe­schik­baar zijn. Als as­so­ci­a­tie­ve arrays (ge­ge­vens­vel­den) slaan*$_GET en $_POST* een reeks va­ri­a­be­len op in de vorm van strings in een variabele.

PHP-arrays kunnen worden ver­ge­le­ken met een kast met meerdere lades. Elk van deze lades biedt ruimte voor het opslaan van gegevens. Om dui­de­lijk­heid te behouden over de inhoud van elke lade, geef je ze een variabele naam. Af­han­ke­lijk van het type array kan deze iden­ti­fi­ca­tie een index of een sleutel zijn. In ge­ïn­dexeer­de arrays wijs je een numerieke index toe aan elke lade, terwijl je in as­so­ci­a­tie­ve arrays de lades labelt met behulp van een op strings ge­ba­seer­de sleutel.

De su­per­glo­bals $_GET en $_POST omvatten een ver­za­me­ling va­ri­a­be­len die worden weer­ge­ge­ven als sleutels, waardoor toegang tot de bij­be­ho­ren­de waarden mogelijk is. We zullen hier dieper op ingaan wanneer we de su­per­glo­bals $_GET en $_POST uit­ge­breid bekijken.

Ge­ge­vens­over­dracht via $_GET

De su­per­glo­ba­le $_GET ver­te­gen­woor­digt een reeks va­ri­a­be­len die via een URL aan een PHP-script worden door­ge­ge­ven.

Als je tijd door­brengt op blogs,in on­li­ne­win­kels enop in­ter­net­fo­ra, zijn je misschien enkele vreemde URL’s op­ge­val­len. Meestal zijn ze opgebouwd volgens het volgende schema:

http://hostname/ordner/filename.php?variablenname=variablevalue

Voor een blog zou het schema er als volgt uit kunnen zien:

http://www.example-blog.com/index.php?id=1

Het ontleden van een der­ge­lij­ke URL is relatief eenvoudig. Op een webserver met het domein example-blog.com staat een bestand met de naam index.php. Dit bestand wordt gebruikt om dy­na­mi­sche webpagina’s te maken en bevat doorgaans HTML- en PHP-code, samen met ver­wij­zin­gen naar externe sja­bloon­be­stan­den en sty­les­heets – in feite alle com­po­nen­ten die nodig zijn voor de weergave van webpagina’s.

De toe­voe­ging van id=1 ineen URL is een veel­ge­bruik­te manier om te bepalen of een webpagina dynamisch is. U vindt dit achter het vraag­te­ken (?) in een URL. Dit onderdeel staat bekend als een HTTP-query­reeks en bevat een variabele (id) en een waarde (1), die met elkaar zijn verbonden door een ge­lijk­te­ken (=). URL-pa­ra­me­ters van deze aard worden gebruikt om dy­na­mi­sche webpagina’s te genereren, database-inhoud op te halen en de juiste sjablonen te activeren.

Dy­na­mi­sche websites maken het mogelijk om inhoud en pre­sen­ta­tie van elkaar te scheiden. Hoewel index.php de in­for­ma­tie over de structuur van een website bevat, moet deze nog steeds met inhoud worden gevuld. Deze wordt meestal op­ge­sla­gen in een database en kan worden ge­raad­pleegd met behulp van pa­ra­me­ters in de HTTP-query­reeks. In het voorbeeld geeft de URL van index.php de parameter id=1 door. Deze geeft aan welke inhoud uit de database moet worden gelezen en in index.php moet worden geladen. In de context van een blog kan dit de ID van een artikel zijn; voor een forum een bepaald bericht. Voor een online winkel kan dit een specifiek product zijn.

Als een URL meer dan één parameter bevat, worden deze met een ampersand (&) aan elkaar gekoppeld.

www.example-blog.com/index.php?page=article&id=1

Hieronder laten we u zien hoe u $_GET kunt gebruiken. Voor dit voorbeeld is het niet nodig om een database te gebruiken. In het volgende script gebruiken we de su­per­glo­ba­le $_GET om de waarden van de va­ri­a­be­lenfirstname en lastname uit een HTTP-query­reeks te lezen en deze naar de PHP-va­ri­a­be­len $variable1 en $variable2 te schrijven:

<?php
$variable1 = $_GET['firstname'];
$variable2 = $_GET['lastname'];
echo "Hello " . $variable1 . " " . $variable2 . "!";
?>
php

Het script wordt aan­ge­roe­pen via de volgende URL:

localhost/hello.php?firstname=John&lastname=Doe.

De pa­ra­me­tersfirstname=John en lastname=Doe zijn door­ge­ge­ven. De uitvoer van de waarden gebeurt net als voorheen met behulp van de taal­con­struc­tie echo.

Afbeelding: Data being passed using $_GET
The URL pa­ra­me­ters pass the variable value pairs firstname=John and lastname=Doe to the PHP script.

Een ge­ge­vens­over­dracht via $_GET leidt er on­ver­mij­de­lijk toe dat de over­ge­dra­gen gegevens zichtbaar zijn in de adresbalk. Dit betekent dat door­ge­ge­ven pa­ra­me­ters kunnen worden ge­tra­ceerd. Het voordeel is dat va­ri­a­be­len kunnen worden op­ge­sla­gen in hy­per­links. Bovendien hebben ge­brui­kers de mo­ge­lijk­heid om URL’s, inclusief de HTTP-query­reeks, als blad­wij­zers in hun browser op te slaan.

Het feit dat GET-pa­ra­me­ters echter in platte tekst in de URL worden weer­ge­ge­ven, maakt deze methode on­ge­schikt voor de over­dracht van gevoelige gegevens, zoals gegevens die door online for­mu­lie­ren worden ge­ge­ne­reerd. Bovendien wordt de hoe­veel­heid gegevens die met $_GET kan worden door­ge­ge­ven, beperkt door de maximale lengte van URL’s.

Je kunt deze be­per­kin­gen omzeilen met de HTTP-methode POST. Gegevens die met deze methode worden door­ge­ge­ven, zijn te vinden in de su­per­glo­ba­le variabele $_POST.

Ge­ge­vens­over­dracht via $_POST

Terwijl in de GET-methode gegevens worden door­ge­ge­ven als een URL-parameter, vindt bij $_POST de ge­ge­vens­over­dracht plaats in de body van een HTTP-verzoek. Hierdoor is het zelfs mogelijk om grote hoe­veel­he­den gegevens van het ene script naar het andere door te geven.

Een be­lang­rijk toe­pas­sings­ge­bied van de HTTP POST-methode is de over­dracht van HTML-for­mu­lier­ge­ge­vens. We zullen dit de­mon­stre­ren aan de hand van het voorbeeld van een nieuws­brie­fabon­ne­ment.

Maak hiervoor een nieuw PHP-bestand aan met de naam page1.php en kopieer het volgende codeblok:

<form method="post" action="page2.php" >
Please send your newsletter to: <br />
Your name: <input type="text" name="first name" /><br />
Your surname: <input type="text" name="lastname" /><br />
Your email address: <input type="text" name="email" /><br />
<input type="submit" value="Send form" />
</form>
php

Het HTML-element <form> wordt gebruikt om for­mu­lie­ren te maken. De starttag bevat twee at­tri­bu­ten:method en action. Met het attribuut method de­fi­ni­eert u de over­dracht­sme­tho­de, in dit geval HTTP-POST. In het attribuut action slaat u de URL op van een script dat alle gegevens ontvangt die via de volgende in­voer­vel­den zijn ingevoerd. Het voorbeeld toont een HTML-formulier met drie in­voe­rele­men­ten (input type=“text”) en een ver­zend­knop (input type=“submit”). Het bestand page2.php is ge­de­fi­ni­eerd als de ontvanger van de gegevens.

Om de ge­ge­vens­over­dracht met $_POST te il­lu­stre­ren, gebruiken we een eenvoudig script om de for­mu­lier­ge­ge­vens te evalueren, dat de in­ge­dien­de waarden opslaat als PHP-va­ri­a­be­len en deze in tekstvorm weergeeft. Maak hiervoor een bestand page2.php aan en voeg de volgende pro­gram­ma­co­de toe:

<?php
$name = $_POST["name"];
$surname = $_POST["lastname"];
$email = $_POST["email"]; 
echo "Hello " . name . " " . $lastname . ", <br /> 
You have registered with the following e-mail address:" . $email . ".";
?>
php

Sla de twee PHP-bestanden op in de map htdocs van uw test­ser­ver en roep page1.php op vanuit de volgende URL in uw web­brow­ser: http://localhost/page1.php. Uw browser toont u nu de in­ter­ac­tie­ve we­bin­ter­fa­ce van uw HTML-formulier.

Afbeelding: Data input via HTML form
The HTML form page1.php collects user data and sends it to the script with the address page2.php

Voer uw in­log­ge­ge­vens in en druk op de ver­zend­knop om va­ri­a­be­len van het ene script naar het andere over te brengen. Zodra u de invoer op pagina1.php bevestigt, wordt u on­mid­del­lijk door­ge­stuurd naar pagina2.php. Het brow­ser­ven­ster toont het resultaat van de uit­voe­ring van het script op basis van de verzonden gegevens.

Afbeelding: Output of user data
Data transfer with the HTTP POST method and output via echo

Ge­brui­kers­in­voer die via de in­voer­vel­den van pagina1.php wordt vast­ge­legd, wordt door pagina2.php opgehaald via:

$_POST["input field name"]

De regel $firstname = $_POST[“firstname”] haalt de invoer in het in­voer­veld firstname op en slaat deze op in de variabele $firstname. De variabele $firstname kan op zijn beurt worden uit­ge­voerd als een te­ken­reeks met behulp van echo.

Hoe PHP-ver­ge­lij­kings­ope­ra­to­ren en de IF-con­struc­tie te gebruiken

Tot nu toe hebben we va­ri­a­be­len ge­de­fi­ni­eerd, ze van het ene script naar het andere door­ge­ge­ven en ze als strings uit­ge­voerd. In de volgende stap leer je hoe je de uit­voe­ring van co­de­frag­men­ten aan bepaalde voor­waar­den kunt koppelen.

Met de taal­con­struc­tie if kunt u scripts schrijven op een manier dat in­struc­ties alleen van kracht worden wanneer aan een door u ge­de­fi­ni­eer­de voor­waar­de is voldaan, bij­voor­beeld het invoeren van het juiste wacht­woord.

Voor­waar­den worden in PHP ge­de­fi­ni­eerd volgens het volgende ba­sis­ka­der:

<?php
if(expression)
    {
    statement;
    }
?>
php

Dit luidt als volgt: Als aan de voor­waar­de zoals be­schre­ven in de uit­druk­king wordt voldaan, wordt de in­struc­tie uit­ge­voerd. Aan een voor­waar­de wordt altijd voldaan als de if-con­struc­tie het resultaat TRUE (waar) re­tour­neert. Anders wordt deze als FALSE (onwaar) beschouwd. In dat geval wordt de in­struc­tie over­ge­sla­gen.

Ge­woon­lijk con­tro­leert de if-con­struc­tie of de waarde van een variabele over­een­komt met wat in de voor­waar­de is ge­de­fi­ni­eerd. Deze con­tro­le­struc­tuur wordt meestal ge­re­a­li­seerd op basis van ver­ge­lij­kings­ope­ra­to­ren.

Ver­ge­lij­kings­ope­ra­to­ren

Ver­ge­lij­kings­ope­ra­to­ren worden gebruikt bij het for­mu­le­ren van voor­waar­den om twee ar­gu­men­ten in een logische relatie te plaatsen die kan worden ge­ë­va­lu­eerd als waar (TRUE) of onwaar (FALSE). Wanneer ver­ge­lij­kings­ope­ra­to­ren worden gebruikt in PHP-con­tro­le­struc­tu­ren, worden ze toegepast op twee va­ri­a­be­len in de uit­druk­king van een if-con­struc­tie:

if ($a == $b) 
    {
    statement;
    }
php

In termen van taal is de con­tro­le­struc­tuur als volgt: als variabele $a gelijk is aan variabele $b, dan worden de in­struc­ties die in de in­struc­tie zijn ge­de­fi­ni­eerd, uit­ge­voerd.

De PHP-ver­ge­lij­kings­ope­ra­to­ren zijn gebaseerd op de pro­gram­meer­taal C en hun notatie verschilt aan­zien­lijk van klassieke wis­kun­di­ge symbolen. Een overzicht vindt u in de on­der­staan­de tabel.

Ver­ge­lij­kings­ope­ra­tor Be­schrij­ving Voor­waar­de
== gelijk Aan de voor­waar­de wordt voldaan als $a en $b dezelfde waarde hebben.
=== is identiek Aan de voor­waar­de wordt voldaan als $a en $b dezelfde waarde hebben en tot hetzelfde ge­ge­vens­ty­pe behoren. Dit kan worden ge­ïl­lu­streerd met een voorbeeld waarin een geheel getal (1) wordt ver­ge­le­ken met een te­ken­reeks (“1”): 1 == “1” //WAAR 1 === “1” //ONWAAR Voor voor­waar­den waarbij twee va­ri­a­be­len gelijk moeten zijn, kunt u het beste altijd de re­la­ti­o­ne­le operator === (is identiek) gebruiken.
!= is ongelijk Aan de voor­waar­de wordt voldaan als $a en $b ongelijke waarden hebben.
!== niet identiek Aan de voor­waar­de wordt voldaan als $a en $b ongelijke waarden hebben of tot ver­schil­len­de ge­ge­vens­ty­pen behoren.
`< * is kleiner dan Aan de voor­waar­de wordt voldaan als waarde* $a kleiner is dan waarde $b*.
*>` is groter dan Aan de voor­waar­de wordt voldaan als de waarde van* $a groter is dan de waarde van $b*.
<= is kleiner dan of gelijk aan De voor­waar­de is vervuld als de waarde van $a kleiner is dan de waarde van $b of als $a en $b dezelfde waarde hebben.
>= is groter dan of gelijk aan Aan de voor­waar­de wordt voldaan als de waarde van $a groter is dan de waarde van $b of als $a en $b dezelfde waarde hebben.

Het volgende script maakt deze con­tro­le­struc­tuur duidelijk. Er worden twee gehele getallen ver­ge­le­ken. De ver­ge­lij­kings­ope­ra­tor < (is kleiner) wordt gebruikt:

<?php
$number1 = 10;
$number2 = 20;
if($number1 < $number2) { 
    echo "The condition is fulfilled";
}
php

We de­fi­ni­ë­ren de va­ri­a­be­len $number1 en $number2 en kennen ze de waarden10 en 20 toe. Ver­vol­gens stellen we een voor­waar­de in: als $number1 kleiner is dan $number2, moet de string in de echo-in­struc­tie worden weer­ge­ge­ven.

Het resultaat van de uit­voe­ring van het script bevat het antwoord: 10 is kleiner dan 20. De if-con­struc­tie re­tour­neert het resultaat TRUE. Aan de voor­waar­de is voldaan.

Afbeelding: The language construct if in the application
If the condition is met, the statement is executed.

Om sta­te­ments te de­fi­ni­ë­ren die worden uit­ge­voerd als niet aan een voor­waar­de wordt voldaan, voeg je de taal­con­struc­tie else toe aan de if-statement om een if-else-statement in PHP te vormen:

<?php
if(condition a)
    {
    statement b;
    }
else 
    {
    statement c
    }
?>
php

Dit script con­tro­leert of voor­waar­de a TRUE of FALSE oplevert. Als aan voor­waar­de a wordt voldaan (TRUE), wordt in­struc­tie b uit­ge­voerd. Als niet aan voor­waar­de a wordt voldaan (FALSE), wordt in­struc­tie b over­ge­sla­gen en wordt in plaats daarvan in­struc­tie c uit­ge­voerd.

Laten we ons script uit­brei­den met de else -con­struc­tie en de ver­ge­lij­kings­ope­ra­tor < (is kleiner) vervangen door == (is gelijk):

<?php
$number1 = 10;
$number2 = 20;
if($number1 == $number2) 
    { 
    echo "The condition is fulfilled";
    }
else 
    {
    echo "The condition is not fulfilled";
    }
?>
php

Deze keer re­tour­neert de if-con­struc­tie FALSE. De waarde van de variabele $number1 is niet gelijk aan de waarde van $number2. Aan de voor­waar­de is niet voldaan. Daarom wordt de in­struc­tie onder if niet uit­ge­voerd, maar wel die onder else.

Afbeelding: The language construct else in the application
If the condition is not met, the statement defined under else is executed.
Opmerking

Om de uit­voe­ring van een co­de­frag­ment te koppelen aan twee gelijke waarden, wordt in PHP een dubbel ge­lijk­heids­te­ken (==) gebruikt. Een enkel ge­lijk­heids­te­ken (=) wordt gebruikt om waarden aan va­ri­a­be­len toe te wijzen.

Je kunt voor­waar­den ont­krach­ten door een uit­roep­te­ken (!) voor een uit­druk­king te plaatsen.

<?php
$number1 = 10;
$number2 = 20;
if ($number1 == $number2) 
    { 
    echo "The numbers are the same.";
    }
if (!($number1 == $number2))
    {
    echo "The numbers are not equal.";
    }
?>
php

Dit voorbeeld benadrukt de voor­waar­de $number1 == $number2 en de negatie ervan. !($number1 == $number2) is gelijk aan ($number1 != $number2).

Een prak­ti­sche toe­pas­sing vanifandelse is het opvragen van een wacht­woord op basis van een HTML-formulier. We kunnen dit simuleren met behulp van onze PHP-bestanden page1.php en page2.php.

Open pagina1.php en plak de volgende code:

<form action="page2.php" method="post">
Please enter your password: <input type="password" name="password" />
<input type="submit" value="send" />
</form>
php

De structuur komt overeen met een eerder aan­ge­maakt formulier. Deze keer is echter één in­voer­veld voldoende: de wacht­woor­d­query. Net als voorheen wordt de ge­brui­kers­in­voer door­ge­ge­ven aan het script page2.php.

We kunnen dit aanpassen met behulp van de volgende code, zodat het in­ge­voer­de wacht­woord wordt ver­ge­le­ken met een op­ge­sla­gen wacht­woord:

<?php
$password = $_POST["password"];
if($password=="qwertz123")
    {
    echo "The password was correct";
    }
else
    {
    echo "The password was incorrect";
    }
?>
php

De code kan als volgt worden uitgelegd: in eerste instantie wijzen we op regel 2 een waarde toe aan de variabele $password, die we ophalen met behulp van de HTTP POST-methode. Ver­vol­gens de­fi­ni­ë­ren we de volgende con­tro­le­struc­tuur: de if-con­struc­tie in regel 3 moet con­tro­le­ren of de waarde van de variabele $password over­een­komt met de te­ken­reeks qwertz123. Als dit het geval is, wordt de te­ken­reeks Het wacht­woord was correct weer­ge­ge­ven. Als if het resultaat FALSE re­tour­neert, wordt else gebruikt in regel 7 en wordt de te­ken­reeks Het wacht­woord was onjuist weer­ge­ge­ven.

Nu roepen we het script page1.php op via de URL http://localhost/page1.php.

Afbeelding: Web interface of the HTML form for password query
The HTML form prompts you to enter a password.

De browser toont de web­weer­ga­ve van ons HTML-wacht­woord­aan­vraag­for­mu­lier. We voeren het wacht­woord quertz123 in dat is ge­de­fi­ni­eerd in script page2.php en klikken ver­vol­gens op de knop Verzenden.

Afbeelding: The password query was correct
The script confirms that the password that was entered is correct.

De web­brow­ser leidt ons au­to­ma­tisch door naar page2.php, terwijl de if-con­tro­le­struc­tuur onze invoer ver­ge­lijkt met het op­ge­sla­gen wacht­woord. Het resultaat is “qwertz123 == qwertz123 is *TRUE”*en ver­vol­gens wordt de string Het wacht­woord was correct weer­ge­ge­ven.

Test het zelf om te zien wat er gebeurt als je een ander wacht­woord in het in­voer­veld typt.

Logische ope­ra­to­ren

Voor­waar­den die u de­fi­ni­eert met behulp van ver­ge­lij­kings­ope­ra­to­ren in de uit­druk­king van de if- con­struc­tie kunnen indien nodig worden ge­com­bi­neerd met andere voor­waar­den in dezelfde uit­druk­king. PHP maakt gebruik van de logische ope­ra­to­renAND en OR.

Close Bond Zwakke band Be­schrij­ving
&& EN Beide voor­waar­den die verband houden met de operator moeten WAAR zijn.
*\ \ * OR Slechts één van de twee voor­waar­den die aan de operator zijn gekoppeld, moet WAAR zijn.

Om voor­waar­den te com­bi­ne­ren, kunt u in PHP nauw verbonden en zwak verbonden logische ope­ra­to­ren gebruiken. In de praktijk levert het gebruik van een van beide spel­lin­gen alleen geen merkbaar verschil op. Als u beide spel­lin­gen com­bi­neert, zult u merken dat OR en || sterker gebonden zijn dan AND en OR. Ook AND en&& zijn sterker gebonden dan OR en ||. Dit is ver­ge­lijk­baar met de rangorde van ope­ra­to­ren die bekend is uit de wiskunde (bij­voor­beeld punt voor streepje: * is sterker gebonden dan +).

De wacht­woor­d­query biedt een praktisch voorbeeld. Doorgaans bestaan in­log­ge­ge­vens uit een geheim wacht­woord en een ge­brui­kers­naam. Het inloggen is alleen succesvol als beide gegevens over­een­ko­men met de gegevens die in het systeem zijn op­ge­sla­gen.

Nu openen we ons wacht­woor­d­query­for­mu­lier opnieuw in Page1.php en voegen we een in­voer­veld voor de ge­brui­kers­naam toe:

<form action="page2.php" method="post">
Username: <input type="text" name="username" /><br />
Password: <input type="password" name="password" /><br />
<input type="submit" value="Submit" />
</shape>
php

In de volgende stap moeten we de con­tro­le­struc­tuur van de if-con­struc­tie aanpassen. We gebruiken de logische operator AND om de voor­waar­de voor de wacht­woor­d­query te koppelen aan een voor­waar­de voor de ge­brui­kers­naam­query.

<?php
$username = $_POST["username"];
$password = $_POST["password"];
if($username=="John Doe" AND $password=="qwertz123")
    {
    echo "Welcome to the internal area" . $username . "!";
    }
else
    {
    echo "Access failed";
    }
?>
php

In ons script page2.php worden de waarden voorusername en password opgehaald en op­ge­sla­gen in de va­ri­a­be­len $username en $password. De uit­druk­king binnen de if-con­struc­tie bevat nu twee voor­waar­den die met elkaar zijn verbonden door de logische operator AND. Aan beide voor­waar­den moet worden voldaan (username==“JohnDoe” en $password==“qwertz123”**)om ifhet resultaat TRUE te laten re­tour­ne­ren.

Terwijl we de ge­brui­kers­naam uit het in­voer­veld username ophalen, kunnen we deze direct in de tekstuele uitvoer gebruiken met behulp van de echo-in­struc­tie. Welcome to the internal area wordt gevolgd door de waarde in $username. Als aan een van beide voor­waar­den niet wordt voldaan, is de tekstuele uitvoer: Access failed.

Afbeelding: Password query with two conditions
The script only confirms the correct password entry if both con­di­ti­ons are met.

Logische ope­ra­to­ren kunnen op elke manier worden ge­com­bi­neerd. Houd er rekening mee dat AND een hogere ope­ra­tor­pri­o­ri­teit heeft dan OR. Net als bij wis­kun­di­ge ver­ge­lij­kin­gen kunt u in PHP haakjes gebruiken om de pri­o­ri­teit aan te geven.

Hoe loops te gebruiken (while, for)

Soms moet een script een bepaald deel van de code meerdere keren doorlopen voordat de rest van de pro­gram­ma­co­de wordt uit­ge­voerd. Pro­gram­meer­ta­len gebruiken hiervoor het concept van loops. Er zijn drie soorten loops in PHP:

  • while -lussen
  • do-while -lussen
  • for -lussen

while -lussen

De while-lus is het een­vou­dig­ste type lus in PHP. Hier is de ba­sis­struc­tuur:

while (condition)
    {
    loop step and other instructions
    }
php

De while-lus vertelt PHP om sub­sta­te­ments uit te voeren zolang aan de while-voor­waar­de wordt voldaan. Om dit te doen, con­tro­leert de PHP-in­ter­pre­ter de voor­waar­de aan het begin van elke lus­door­loop. De uit­voe­ring van de on­der­ge­schik­te code wordt alleen gestopt wanneer niet langer aan de while-voor­waar­de wordt voldaan.

Dit principe kan worden ge­ïl­lu­streerd met een eenvoudig telscript:

<?php
$number = 1;
while ($number <= 10) {
    echo $number++ . "<br />";
    }
?>

Het concept van in­cre­men­te­ren werd ge­ïn­tro­du­ceerd in het gedeelte Reken met va­ri­a­be­len van deze tutorial. In het volgende script bouwen we voort op dit concept, maar met een twist. Deze keer gebruiken we een post-increment operator. Dit verhoogt de waarde van de integer variabele $number met 1 na elke iteratie van de lus, on­mid­del­lijk na de echo tekst­uit­voer. We stellen de voor­waar­de voor de while-lus als volgt in: $number is groter dan of gelijk aan 10. Bijgevolg wordt de echo-in­struc­tie her­haal­de­lijk uit­ge­voerd totdat $number een waarde van 10 over­schrijdt.

Afbeelding: The script counts to 10 and then breaks off
The script in­cre­ments the variable $num until a value greater than 10 is reached.

Het resultaat van de uit­voe­ring van het script is een te­ken­reeks die de waarde van de variabele $number voor elke lus­door­loop afdrukt voordat deze wordt verhoogd. Als gevolg hiervan telt het script van 1 tot 10 en stopt het met het uitvoeren van de code zodra niet langer aan de while-voor­waar­de wordt voldaan.

do-while -lussen

De structuur van de do-while-lus is ver­ge­lijk­baar met die van de while-lus. Het enige verschil is dat de voor­waar­de niet aan het begin van elke lus wordt ge­con­tro­leerd, maar alleen aan het einde. Het ba­sis­sche­ma van een do-while-lus is als volgt:

do {
     loop step and other instructions
     }
    while (condition)
php

Ge­pro­gram­meerd als een do-while-lus zou het voor­gaan­de script er als volgt uitzien:

<?php
$number = 1;
do {
    echo $number++ . "<br />";
    }
while ($number <= 10);
?>
php

In dit geval blijft het resultaat hetzelfde. Het bij­zon­de­re aan de do-while-lus is dat deze minstens één keer wordt doorlopen, zelfs als in geen enkele lus­door­loop aan de voor­waar­de wordt voldaan.

for -lussen

Over het algemeen heeft de for-lus in een PHP-script dezelfde functie als de while-lus. In te­gen­stel­ling tot de while-lus worden de start­waar­de, voor­waar­de en in­struc­tie echter op één regel ge­schre­ven in plaats van verspreid over drie of meer regels. De ba­sis­struc­tuur van de for-lus is:

for (start value; condition; loop step)
    instructions
php

Het bo­ven­staan­de voorbeeld zou compacter kunnen worden ge­schre­ven als een for-lus:

<?php
for($number = 1; $number <= 10; $number++) {
    echo $number . "<br /> ";
}
?>
php

Eerst wordt de waarde 1 ge­de­fi­ni­eerd voor $number. Ver­vol­gens con­tro­leert PHP of aan de voor­waar­de $number <= 1 is voldaan. Als dit het geval is, wordt de lus voort­ge­zet en worden de in­struc­ties onder de lus uit­ge­voerd (hier is de in­struc­tie echo). Zodra dit is gebeurd, worden de stappen van de lus uit­ge­voerd. In deze context is de keuze tussen pre- of post-increment niet relevant, omdat deze stap altijd vóór de uitvoer plaats­vindt. Zodra de lusstap is voltooid, begint de volgende iteratie van de lus.

In een for-lus worden de seed, voor­waar­de en lusstap beschouwd als optionele com­po­nen­ten. In theorie zijn zelfs lege lussen mogelijk. Der­ge­lij­ke lussen zouden echter overbodig zijn.

Het is in principe aan jou om te beslissen of je je PHP-scripts met een for- of een while-lus schrijft. Er is echter een argument om voor for -lussen te kiezen: wanneer for-lussen worden gebruikt, heb je een beter overzicht van de fra­me­work­ge­ge­vens van de lus. Dit voorkomt het risico dat je per ongeluk een oneindige lus schrijft die blijft draaien totdat het geheugen van de in­ter­pre­ter vol is. Ver­wij­zend naar het vorige voorbeeld kan dit gebeuren wanneer je vergeet de waarde van de variabele $number te verhogen.

Als de lus echter minstens één keer moet worden doorlopen, ongeacht de voor­waar­de, dan is de do-while-lus de juiste keuze.

brea­kan­d­con­tinue -in­struc­ties

De uit­voe­ring van een while-, do-while- of for-lus kan worden beïnvloed door debreak- en continue- in­struc­ties. Gebruik break om de stroom van een lus op elk moment te on­der­bre­ken en door te gaan met het overslaan van een lus­door­loop. Beide in­struc­ties zijn gebonden aan een voor­waar­de met behulp van if. Het volgende voorbeeld toont ons telscript met een break:

<?php
for ($number = 1; $number <= 10; $number++) {
    if ($number == 5) {
      echo "If it is 5, we abort the script!";
      break;
    }
echo $number . "<br /> ";
}
?>
php

In de for-lus hebben we bepaald dat de waarde van de variabele $number in elke lusronde met de waarde 1 moet worden verhoogd, beginnend bij 1, totdat de variabele de waarde 10 heeft bereikt. We kunnen deze lus voor­tij­dig stoppen met break zodra $number de waarde 5 heeft bereikt. De taal­con­struc­tie echo geeft alleen de getallen 1 tot en met 4 weer.

Afbeelding: for loop with break
The break statement breaks the loop as soon as the if condition is met.

Om de uitvoer van de vijfde ronde over te slaan, maar de hele lus niet te stoppen, vervangen we de break-in­struc­tie door continue:

<?php
for ($number=1; $number <= 10; $number++) {
    if ($number == 5) {
      echo "Let's skip the 5!<br />";
      continue;
    }
echo $number . "<br /> ";
}
?>
php

In plaats van het cijfer 5 geeft PHP de tekstreeks We slaan nummer 5 over! weer, die is ge­de­fi­ni­eerd onder if.

Afbeelding: for loop with continue statement
The for loop is in­ter­rup­ted by a continue statement.

Hoe be­stands­be­wer­kin­gen uitvoeren

Dy­na­mi­sche web­con­tent is opgebouwd volgens het principe van het scheiden van inhoud en pre­sen­ta­tie. Om dit te bereiken bieden script­ta­len zoals PHP een breed scala aan func­ti­o­na­li­tei­ten die de naadloze in­te­gra­tie van content uit externe da­ta­bron­nen in centrale sja­bloon­be­stan­den ver­ge­mak­ke­lij­ken. In de praktijk zijn deze da­ta­bron­nen meestal databases die worden beheerd met behulp van be­heer­sys­te­men zoals MySQL. Hoe dit werkt, kunt u ontdekken in onze MySQL-tutorial.

Het is ook mogelijk om gegevens uit bestanden op te nemen. Hieronder laten we u zien hoe u bestanden als een string in een PHP-script kunt lezen en de tekst­uit­voer van uw script in bestanden kunt opslaan.

Bestanden lezen

Om de inhoud van een bestand te lezen, beschikt PHP over ver­schil­len­de functies. Hiervan zijn file() en file_get_contents() bijzonder geschikt voor de be­tref­fen­de taak. Terwijl de functie file_get_contents() de volledige inhoud van een bestand in een string leest, slaat de functie file() de inhoud op als een array. Elk element van de array komt overeen met een regel van het bestand. Met file() is het een­vou­di­ger om elke regel af­zon­der­lijk weer te geven.

We de­mon­stre­ren de PHP-be­stands­be­wer­kin­gen op het tekst­be­stand example.txt, dat we in de map htdocs van onze test­ser­ver plaatsen. Het bestand bevat vier regels dum­my­tekst:

Lorem ipsum dolor sit amet, con­sec­te­tu­er adi­pis­cing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis par­tu­rient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pel­len­tesque eu, pretium quis, sem.

Eerst moeten we het hele bestand als een string lezen. Hiervoor moeten we de naam van het be­tref­fen­de bestand als parameter toewijzen aan de functie file_get_contents():

file_get_contents('example.txt')

Nu hebben we de mo­ge­lijk­heid om met de gelezen string te werken. We kunnen deze bij­voor­beeld toewijzen aan een variabele en deze als tekst weergeven in de web­brow­ser:

<?php
$example = file_get_contents('example.txt');
echo $example;
?>
php
Afbeelding: The script reads the file example.txt.
The file that has been read is saved in the browser.

In de brow­ser­weer­ga­ve zien we dat de tekstreeks zonder alinea’s wordt weer­ge­ge­ven. De re­ge­lein­den van het oor­spron­ke­lij­ke bestand zijn niet zichtbaar. Dat komt omdat de web­brow­ser de tekst­uit­voer van het script in­ter­pre­teert als HTML-code. Re­ge­lein­den die in tekst­ver­wer­kers zijn ge­de­fi­ni­eerd, gaan verloren.

Om de oor­spron­ke­lij­ke structuur te behouden, heb je een aantal opties. Je kunt de HTML-code voor de re­ge­lein­de (br) handmatig toevoegen aan het bron­be­stand met behulp van zoeken en vervangen, een <pre> rond de inhoud van het bestand plaatsen, de CSS-ei­gen­schap white-space: pre -wrap instellen, of de functie nl2br() gebruiken om PHP te laten weten dat het re­ge­lein­den (nieuwe regels) au­to­ma­tisch moet omzetten naar HTML-re­ge­lein­den (breaks). Hier is de code:

<?php
$example = file_get_contents('example.txt');
echo nl2br($example);
?>
php

Als de echo-taal con­struc­tie wordt gebruikt in com­bi­na­tie met nl2br(), voegt PHP een HTML-re­ge­lein­de in voor elke nieuwe regel.

Afbeelding: The nl2br() function in the application
nl2br() helps to structure imported data.

Om de regels van een bestand af­zon­der­lijk weer te geven, kunt u de functie file() gebruiken. Deze leest een bestand, nummert alle regels beginnend met het getal 0 en slaat hun inhoud op als elementen van een array. Als we dit toepassen op ons voorbeeld, krijgen we het volgende resultaat:

[0] = Lorem ipsum dolor sit amet, con­sec­te­tu­er adi­pis­cing elit

[1] = Aenean commodo ligula eget dolor. Aenean massa.

[2] = Cum sociis natoque penatibus et magnis dis par­tu­rient montes, nascetur ridiculus mus.

[3] = Donec quam felis, ultricies nec, pel­len­tesque eu, pretium quis, sem

Om de be­tref­fen­de inhoud met echo weer te geven, hoeft u alleen maar het gewenste re­gel­num­mer op te geven. Het volgende script geeft bij­voor­beeld alleen de eerste regel van het bestand example.txt weer in de browser:

<?php
$example = file("example.txt");
echo $example [0];
?>
php
Afbeelding: The file() function in the application
Select which element of the array you wish to output.

Bestanden schrijven

PHP gaat verder dan alleen het lezen van bestanden, omdat je er ook moei­te­loos bestanden mee kunt lezen, maken en wijzigen.

Het gebruik van de functie file_put_contents() is een goed voorbeeld. Er zijn slechts twee pa­ra­me­ters nodig: de naam van het doel­be­stand en de gegevens, die een te­ken­reeks of een array kunnen zijn. In het on­der­staan­de script wordt een nieuw bestand met de naam test.txt aan­ge­maakt, dat de te­ken­reeks This is a test! bevat. Door \r\n toe te voegen, wordt een re­ge­lein­de in het bestand ge­ga­ran­deerd.

<?php
file_put_contents("test.txt", "This is a test! \r\n");
echo "test.txt has been created!";
?>
php
Afbeelding: File operations: write files
The PHP script writes the string This is a test! into the file test.txt.

Aangezien file_put_contents geen uitvoer voor de browser geeft, voegen we een echo-in­struc­tie toe die ons vertelt welke actie wordt uit­ge­voerd.

Als er al een bestand met dezelfde naam in de doelmap staat, wordt dit over­schre­ven. U kunt dit voorkomen door de parameter FILE_APPEND in te stellen:

<?php
file_put_contents("test.txt","The test was successful! \r\n", FILE_APPEND);
echo "test.txt has been updated!";
?>
php

Door file_put_contents() te gebruiken met de parameter FILE_APPEND, wordt nieuwe inhoud toe­ge­voegd aan bestaande inhoud.

Afbeelding: File operations: update files
The PHP script adds the string The test was suc­ces­sful!.

Wat PHP naar het doel­be­stand schrijft, hoeft niet nood­za­ke­lij­ker­wijs in het script te worden ge­de­fi­ni­eerd. Als al­ter­na­tief kunt u inhoud van het ene bestand naar het andere over­bren­gen. Het volgende script leest de inhoud van example.txt en voegt deze in het bestand test.txt in:

<?php
$example = file_get_contents("example.txt");
file_put_contents("test.txt", $example, FILE_APPEND);
echo "test.txt has been updated!";
?>
php
Afbeelding: File operations: transfer content from one file to another
The PHP script reads the data from the example.txt file and adds it to the test.txt file.
Ga naar hoofdmenu