Les 2: Statements

Inleiding in Statements

In de eerste les leerde je de basis-syntax van PHP te gebruiken. Je leerde instructies te schrijven waarmee je waardes kon toewijzen aan variabelen. Instrucies in PHP worden ook wel statements genoemd.

Alle statements die je in les 1 schreef, werden allemaal uitgevoerd wanneer het document werd geopend in de browser. In les 2 leer je hoe je statements uit kunt voeren als aan bepaalde voorwaarden wordt voldaan.

if() Statement

Het if() statement is misschien wel een van de belangrijkste bouwblokken van een programmeertaal. net als in vrijwel alle andere programmeertalen kom hij ook in php voor. De basis-syntax van een if() statement ziet er als volgt uit:

<?php
	if($test){
		// code die wordt uitgevoerd als $test waar(true) is
	}
?>

Blijkbaar kun je “conditioneel” statements uitvoeren als aan een test is voldaan. Deze test kan van alles zijn:

  • Leeftijdscheck Wanneer de leeftijd van een bezoeker voldoet aan de minimumleeftijd, mag hij de website bekijken.
  • Inlogcontrole Wanneer de gebruikersnaam en het wachtwoord kloppn, krijgt de bezoeker toegang tot de website.
  • Zondag gesloten Sommige ondernemers willen niet dat hun website op zondag zichtbaar is voor bezoekers. Met een if-statement kan de website worden getoond zolang het gèèn zondag is.

Bij een inlogcontrole moeten zelfs twee zaken kloppen; de gebruikersnaam moet bekend zijn èn het bijbehorende wachtwoord moet kloppen. Dit is allemaal mogelijk met een if-statement.

Om te kijken hoe je bepaalde “voorwaarden” kunt maken, is het eerst nodig dat je kennis maakt met vergelijkingsoperatoren.

Vergelijkingsoperatoren

In les een maakte je kennis met de toewijzingsoperator. Hiermee kun je waarden toewijzen aan een variabele. Eigenlijk zou je dit ook als een controle als test kunnen zien, want als het toewijzen niet lukt, krijg je een foutmelding. Als het toewijzen wèl lukt, gaat de code stilletjes verder met uitvoeren.

Zo heb je ook operatoren waarmee je het een kunt vergelijken met het ander:

OperatorUitleg
==Wordt gebruikt om te testen of iets gelijk is aan iets anders.
===Wordt gebruikt om te testen of iets gelijk is aan iets anders èn of ze beide van hetzelfde type zijn.
!=Testen of iets niet gelijk is aan iets anders.
<Testen of iets kleiner is dan iets anders.
>Testen of iets groter is dan iets anders.
<=Testen of iets kleiner is of gelijk aan iets anders.
>=Testen of iets groter dan of gelijk aan iets anders.

Goed, hoe zet je vergelijkingsoperatoren nou in in de praktijk? Bekijk een voorbeeld waarmee de leeftijd van een bezoeker wordt gecontroleerd:

<?php
	$pietje = 19;
	$kees = 18;
	$karel = 17;

	if($pietje >= 18){
		// je mag alcohol nuttigen
	}else{
		// je mag geen alcohol nuttigen
	}
?>

in bovenstaand voorbeeld wordt de leeftijd van $pietje gecontroleerd. Pietje’s leeftijd voldoet aan de minimumleeftijd. $kees zal ook voldoen aan de minimumleeftijd, maar $karel niet.

In onderstaand voorbeeld wordt gecontroleerd of het geen zondag is:

<?php
	# Met date('N') krijg je het nummer van de weekdag. 1 staat voor maandag, 7 staat voor zondag
	$dag_nummer = date('N');
	if($dag_nummer != 7){
		// Het is geen zondag
	}else{
		// Het is wel zondag
	}
?>

Probeer zelf eens een voorbeeld te maken waarin je controleert of iemand in 1984 is geboren… Lukt dit? Dan heb je vergelijkingsoperatoren goed door!

Logische operatoren

wanneer je meerdere dingen wilt controleren of testen voordat code wordt uitgevoerd, zet je logische operatoren in.

OperatorUitleg
andControleer of twee condities waar zijn.
orControleer of een of alletwee van de beide condities waar is.
!Controleer of een conditie nièt waar is.
xorControleert of een van de condities waar is, maar niet allebei.
&&Zelfde als and
||Zelfde als or

Hieronder zie je een voorbeeld van een inlogcheck waarbij gebruikersnaam en wachtwoord worden gecontroleerd:

<?php
	$user = "admin";
	$pass = "w8w00rd";
	if($user === "admin" and $pass === "w8w00rd"){
		// gebruikersnaam en wachtwoord kloppen
	}else{
		// gebruikersnaam of wachtwoord klopt niet
	}
?>

Bovenstaand voorbeeld zou niet heel moeilijk moeten zijn. Het uitroepteken als logische operator is echter lastig om uit te leggen. We gaan als voorbeeld met behulp van het uitroepteken controleren of het geen zondag is. Hier wordt gebruik gemaakt van nóg een techniek, namelijk haakjes in een vergelijking:

<?php
	if(!(date('N') === 7)){
		// Het is geen zondag
	}
?>

Tussen de haakjes wordt getest of het zondag is. Door een uitroepteken voor deze haakjes te zetten, wordt vervolgens gecontroleerd of het géén zondag is. Als deze logische operator nog moeilijk te doorgronden is, laat hem voor deze cursus dan nog even links liggen.

Shorthand methode voor if-constructies

Naast de “gewone” manier van het opstellen van een if-constructie, kan dit ook in een sterk verkorte versie. Deze methode wordt vaak gebruikt voor het conditioneel toekennen van een waarde aan een variabele. Bekijk eerst een voorbeeld met een gewone notatie van een if-constructie:

<?php 
	$greeting = "goedemorgen";
	if(date('G') >= 12){
		$greeting = "goedemiddag";
	}
 ?>

In bovenstaand voorbeeld wordt er van uit gegaan dat de begroeting standaard “goedemorgen” moet zijn. Alleen wanneer het 12:00 of later is, wordt de begroeting veranderd in “goedemiddag”. Nu volgt een shorthand-if constructie waarbij een waarde wordt toegekend op basis van het uur van de dag:

<?php
 	$greeting = (date('G') >= 12)? "goedemiddag":"goedemorgen";
 ?>

Je ziet dat je met behulp van de shorthand methode op één regel met behulp van een if-constructie een waarde kunt toewijzen aan een variabele. ()? is hierin de test die wordt uitgevoerd. De eerste waarde die hierna volgt is degene die wordt toegekend als de test “klopt” (met andere woorden; als de test evalueert tot “true”). Klopt de test niet, dan wordt de waarde na de dubbele punt toegekend.

Controlstructures

Behalve de if() constructie voor het “conditioneel uitvoeren van code” zijn er nog andere zogenaamde “controlstructures”. In les 2 bespreken we twee loops (for() en while()) en een variant op de if-constructie (switch()).

For()

for() is een zogenaamde lus. Deze kan een stuk code meerdere keren uitvoeren, net zo lang totdat de meegegeven conditie niet meer waar is. De basis-syntax ziet er als volgt uit:

<?php
	for($i=0; $i<10; $i++){
		// Deze code wordt uitgevoerd zolang $i kleiner is dan 10.
	}
?>

een for-loop heeft 3 parameters nodig, gescheiden door een puntkomma (;):

  1. $i=0  De beginwaarde van een teller in bovenstaand voorbeeld zetten we $i op 0 wanneer de eerste iteratie van de loop plaatsvindt. “iteratie” staat voor het doorlopen van de code binnen de accolades.
  2. $i<10  Dit is de controle die voor elke iteratie van de loop wordt uitgevoerd. Als de controle een positieve uitkomst heeft, wordt de code tussen de accolades uitgevoerd.
  3. $i++  Nadat de code tussen de accolades is uitgevoerd, tellen we 1 bij $i op. Het ++ teken betekent dus dat je 1 bij een waarde optelt.

Telkens wanneer de derde parameter van for() is uitgevoerd, wordt er gecontroleerd of $i nog steeds kleiner is dan 10. Is dat het geval, dan wordt nogmaals de code uitgevoerd. Waar zou je een for-loop voor kunnen gebruiken? Bijvoorbeeld voor het uitrekenen van de tafel van 7:

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

Een ander voorbeeld van het gebruik van een for-lus is om de inhoud van een array te tonen:

<?php
	// Eerst hebben we een array nodig...
	$klas = ["bart","karel","coen","alvar"];
	// count() geeft het aantal waardes uit een array terug
	for($i=0;$i<count($klas);$i++){
		// De eerste keer heeft $i als waarde 0, ideaal om de eerste persoon uit de klas te tonen (de eerste waarde uit een array heeft immers als index 0)
		echo $klas[$i] . "<br />";
	}
?>

 while()

while() is net als for() een voorbeeld van een lus. while() heeft wel een iets andere syntax (schrijfwijze). De basis syntax is als volgt:

<?php 
	while($voorwaarde){
		// Code die wordt uitgevoerd zolang $voorwaarde waar(true) is.
	}
?>

In tegenstelling tot for() heeft while() maar één parameter nodig. Zolang de $voorwaarde blijft evalueren tot true, wordt de lus uitgevoerd. Laten we het eerste for() voorbeeld eens vertalen naar een while() voorbeeld:

<?php
	$i = 0;
	while($i<10){
		// Code die wordt uitgevoerd zolang $i kleiner is dan 10
		$i++;
	}
?>

Voordat de lus begint, wordt $i op 0 gezet. Zodra de while() lus gaat starten, wordt een test uitgevoerd om te kijken of $i kleiner is dan 10. Als dat het geval is, wordt de code tussen de accolades uitgevoerd. Net voordat het codeblok sluit, tellen we 1 bij $i op. Vervolgens kijkt while() weer of $i kleiner is dan 10. Is dat het geval, dan wordt de code tussen de accolades weer uitgevoerd.

switch()

Laten we een welkomstboodschap instellen op basis van het uur van de dag. Wanneer het vroeger is dan 12:00, wordt de welkomstboodschap “goedemorgen” ingesteld. Wanneer het tussen 12:00 en 18:00 wordt de welkomstboodschap “goedemiddag” ingesteld. Wanneer het 18:00 of later is, wordt de welkomstboodschap “goedenavond” ingesteld. Bekijk het volgende voorbeeld:

<?php
	$uur = date('G');

	switch($uur){
		case ($uur < 12):
			$begroeting  = "Goedemorgen!";
		break;
		case($uur >= 12 && $uur < 18):
			$begroeting = "Goedemiddag!";
		break;
		case($uur >= 18):
			$begroeting = "Goedenavond!";
		break;
	}
?>

met $uur = date(‘G’);  inventariseren we wat het uur van de dag momenteel is. Het switch() blok gaat vervolgens $uur testen in een aantal cases. Zodra de betreffende testcase positief uitpakt, wordt de code tussen case: en break; uitgevoerd.

Maar wat als de $test die je aan switch() meegeeft, niet past bij een bepaalde case, is het dan ook mogelijk een stuk standaard code uit te voeren? Zeker! Check volgende voorbeeld:

<?php
	$dag_nummer = date("N");

	switch($dag_nummer){
		case 7:
			echo "Vandaag zijn we gesloten.";
		break;
		case 6:
			echo "We zijn vandaag van 9:00 tot 17:00 geopend.";
		break;
		default:
			echo "We zijn vandaag open van 8:30 tot 18:00.";
		break;
	}	
?>

Met bovenstaande code zou je de bezoeker van je website kunnen vertellen of de fysieke winkel vandaag geopend is en zo ja, van hoe laat tot hoe laat. Op zondag en zaterdag gelden afwijkende openingstijden, maar door de week gelden elke dag dezelfde openingstijden.

Voorbereidingen om succesvol te kunnen starten met les 3

Voor les 3 is het belangrijk dat je uitvoerig experimenteert met het “testen’ van verschillende zaken. Je moet vloeiend zowel vergelijkings- als logische operatoren in kunnen zetten. Daarnaast is het belangrijk dat je snapt dat je een loop nooit oneindig moet maken, omdat in dat geval de webserver zal crashen.

Opdracht voor les 3

Om het behandelde van les 2 te herhalen krijg je van de docent een kleine praktische opdracht. De uitwerking daarvan stuur je een dag vóór les 3 naar de docent.

6 thoughts on “Les 2: Statements

  1. Goedenmiddag,

    Bedankt voor deze site! Ziet er goed uit. Heb alleen ergens een foutje ontdekt (Denk ik 😉 deze g komt vaker voor in meerdere voorbeelden.

    = 12)? “goedemiddag”:”goedemorgen”;
    ?>

    de waarde ‘g’ geeft aan 1 tot 12 uur. Het is dus altijd ochtend. Als de “g” in “G” 1 tot 24 uur veranderd word dan klopt hij wel.

    met vriendelijke groet Tjeerd

  2. Bedankt voor deze cursus! Erg leerzaam!
    Ik ben in deze les echter een inconsistentie tegengekomen:
    In het voorbeeld van switch staat:
    $uur = date(‘G’);
    en in de uitleg
    $uur = date(‘g’);

    Ik vermoed dat dit gaat over waar Tjeerd een opmerking over maakte, maar dat het niet voldoende gecorrigeerd is. 😉

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.