PHP - BESTURING

HOOFDSTUKKEN

In dit deel
if (... elseif) (... else)
switch()
while()
do...while()
for()
break
Oefening ‘tafel van vermenigvuldiging’

In dit deel

Terug naar de top

Tot nu toe zijn we vooral bezig geweest met het aanleren van begrippen, definities, enzovoort. Het element ‘actie’ ontbreekt. Met ‘actie’ bedoelen we hier, dat we een stukje programma schrijven die ‘iets’ uitvoert. De gebruiker (=website-bezoeker) maakt op het scherm dmv een ‘klik’ een bepaalde keuze. Op basis daarvan voert een PHP een ‘actie’ uit. (Voorbeelden: een product-beschrijving weergeven, een foto weergeven, een berekening maken, enzovoort.). Maakt de gebruiker een ‘andere’ keuze, dan moet een ‘andere ‘ actie volgen.

We beschrijven hier de navolgende besturings-mechanismen.

  • if ... elseif ... else
  • switch ( )
  • while ( )
  • do...while ( )
  • for ( )
  • break

Het geheel wordt beeindigd met een kleine oefening.

if (... elseif) (... else)

Terug naar de top

Waarschijnlijk de meest belangrijke van de besturingsmechanismen. Wordt in combinatie gebruikt met vergelijkingsoperatoren (Zie bij "PHP - Variabelen".)
(‘If’ kun je vertalen door ‘als’; ’else’ door ‘anders’)
‘Als’ (if) iets is vervuld doe je ‘a’...’anders’ (else) doe je ‘b’.
‘Als het minder kost dan 10 euro koop ik het, anders niet’

<body>
<?php
$prijs=12;
if ($prijs<=10){
echo ("Verkocht");}
else
{echo ("Een andere keer");}
?>
</body>

Sla alles op in het bestand oef0801.php: De variabele $prijs krijgt de waarde van 12. Zoals later zal blijken, kan dit een waarde zijn die verkregen is uit een database, of een waarde die is ingetypt door de bezoeker van je site.
If($Prijs <=10), kun je lezen als volgt: ‘Als de variable prijs kleiner is of gelijk aan 10...’ Indien bovenstaande klopt dan volgt de statement: echo ("Verkocht")
Let er vooral op dat na het if statement er een accolade volgt ( { )!
Indien de statement tussen de ‘if’ haakjes klopt, dan wordt ALLES uitgevoerd die tussen de accolades staat (compound statement). Indien het niet klopt wat er tussen ‘if’ haakjes staat, dan gaat de PHP code automatisch naar de ‘else’ statement. Ook deze wordt gevolgd door ‘accolades’ ( { })
In ons voorbeeld is de prijs NIET kleiner of gelijk aan 10, dus voert de code uit wat er bij ‘else ‘ staat.

In werkelijkheid kunnen mogelijks meer keuzes worden ingebouwd. We kunnen voorbeeld stellen:
-als de prijs kleiner of gelijk is aan 10 dan kopen we
-als de prijs kleiner of gelijk is aan 12 dan denken we na
-in alle andere gevallen kopen we niet.
Zie de volgende code:

<body>
<?php
$prijs=11;
if ($prijs<=10){
echo ("Verkocht");}
elseif ($prijs<=12){
echo ("Ik denk na");}
else
{echo ("Een andere keer");}
?>
</body>

Resultaat van oef0802.php:

NB. if (voorwaarde) { houdt in dat de expressie wordt uitgevoerd als aan de voorwaarde wordt voldaan. Met behulp van '!' kan dit omgedraaid worden: if (!voorwaarde) { houdt in dat de expressie wordt uitgevoerd als aan de voorwaarde NIET wordt voldaan.

Het ‘else...if’ statement kun je zo vaak als je wil na elkaar gebruiken. Voorbeeld:

if($a == 1) {
   echo "a heeft de waarde 1" }
   elseif($a == 2) {
   echo "a heeft de waarde 2" }
   elseif($a == 3) {
   echo "a heeft de waarde 3" }
   else {
   echo "a heeft de niet de waarde 1, 2, of 3" }

Hierbij wordt een hele reeks toestanden van één variabele gecontroleerd. Dat kan ook met switch

switch()

Terug naar de top

Switch wordt gebruikt om een hele reeks toestanden van één variabele (in het volgende voorbeeld: $a) te controleren. In de case fragmenten volgen de afzonderlijke op gelijkheid te testen waarden en de instructies die daarbij moeten worden uitgevoerd. De opdracht break in elk instructieblok zorgt ervoor dat de switch-instructie wordt verlaten na het uitvoeren van het case-fragment dat van toepassing is. Zonder de opdracht break worden alle instructies vanaf het case-fragment uitgevoerd, ongeacht de geldende voorwaarden.
Het default-gedeelte wordt alleen uitgevoerd als geen van de voorafgaande case-fragmenten werd uitgevoerd. Deze opdracht is vergelijkbaar met else in if .. elseif .. else.
NB. Voor andere toepassingen van break zie verderop in dit deel.

switch ($a) {
  case 1:
    echo "a bevat de waarde 1";
    break;
  case 2:
    echo "a bevat de waarde 2";
    break;
  case 3:
    echo "a bevat de waarde 3";
    break;
  default:
    echo "a is een ander getal";
}

while()

Terug naar de top

Bij het gebruik van de ‘while ( )’ statement ontstaat een lus-structuur. ‘While’ kunnen we vertalen als: ‘zolang’. Zolang een variabele een bepaalde waarde heeft, voeren we iets uit.
We hebben allemaal, op de schoolbanken, de ‘rekenkundige‘ tafels opgedreund. We maken nu even de tafel van 7 d.m.v. PHP. Open start.php, en voeg onderstaande code toe in de <body>. Sla alles op als oef0803.php. M.b.v. FTP landen we dit bestand op in de map PHP op de server. "); $teller++;} ?> We openen het bestand op de server dmv onze internet-browser.

NB. Het is van het grootste belang dat er een goed gedifinieerd einde komt aan de lus. Anders kan de lus zich tot in het oneindige herhalen.

do...while()

Terug naar de top

Als we willen dat een lus tenminste éénmaal doorlopen wordt, kunnen we geen gebruik maken van de ‘while ( )’ statement. Deze controleert namelijk aan het begin van de lus of de voorwaarde false is. Is dat het geval, dan wordt die niet uitgevoerd. De ‘do .. while ( )’ statement doet dit wel. De lus wordt éénmaal doorlopen en dan pas wordt de voorwaarde gecontroleerd. Dit kunnen we als volgt weergeven:
do {statement die wordt uitgevoerd tot de voorwaarde niet meer geldt }
while (voorwaarde).
Op het eerste zicht lijkt er geen verschil met ‘while ( )’. Echter: Bij while ( ) beginnen we met het vermelden van de voorwaarde. In het voorbeeld hiervoor vermelden we eerst ‘while ($teller<=10), daarna de uit te voeren actie.
Bij do...while, voeren we eerst de actie uit, en gaan dan na of de voorwaarde van ‘while($teller<=10) nog geldt. Dus bij do...while zullen we ALTIJD ten minste éénmaal een actie hebben.
Bij while( ) kan het zijn dat er helemaal geen actie wordt uitgevoerd (namelijk als $teller > 10). De in onderstaand voorbeeld (oef0804.php / oef0804.jpg) is de teller 11 en wordt de actie toch (maar slechts éénmaal) uitgevoerd.

<?php
$teller=11;
$getal=7;
do {
echo ("$teller.maal.$getal = " . ($teller*$getal). "<br>");
$teller++;}
while($teller<=10)
?>

NB. Met behulp van break kan de lus zonodig eerder verlaten worden. Voorbeeld (oef0805.php / oef0805.jpg):

<?php
$teller=1;
$getal=7;
do {
echo ("$teller.maal.$getal = " . ($teller*$getal). "<br>");
$teller++;
if ($teller == 3) break; }
while($teller<=10)
?>

for()

Terug naar de top

Normaal gesproken worden lussen met een vast aantal herhalingen gerealiseerd met for. Bij while-lussen hadden we weliswaar ook een vast aantal herhalingen, maar meestal worden while-lussen ingezet voor variabele afbreekvoorwaarden. Bij het gebruik van het ‘for ( ) ‘ statement maken we op de volgende wijze een lus structuur:
For (expressie1; expressie2; expressie3 )
{ gewenste statement(s) }

Laten we direct een praktisch voorbeeld geven:

<?php
for ($k=1 ; $k<=5; $k++)
{echo ("$k <br>"); }
?>

In ons voorbeeld wordt krijgt de variabele $k de waarde 1.
Vervolgens hebben we ‘expressie2’. Dat is de voorwaarde voor het verder zetten van de lus.
In ons voorbeeld wordt nagegaan of de variabele $k kleiner of gelijk is aan 5.
In geval van TRUE, worden de ‘geneste’ statements uitgevoerd (-statements tussen de accolades)
In ons voorbeeld wordt de waarde van de variabele $k weergegeven op het scherm (echo).
Na het uitvoeren van de geneste statement, wordt de derde expressie (‘expressie3’) uitgevoerd.
In ons voorbeeld wordt de variabele $k met 1 verhoogd (‘$k++’)
Daarna wordt de ‘expressie2’ weerom gecontroleerd. Ingeval van TRUE, wordt de geneste statement opnieuw uitgevoerd.
De weergave van bovenstaande code in de browser ziet er als volgt uit (oef0806.php / oef0806.jpg):

In het volgende voorbeeld wordt met twee startwaarden gewerkt: $l met startwaarde 0 en $h met startwaarde 10. In de iteratie wordt $l bij elke herhaling van de lus met 1 verhoogd en $h met 1 verlaagd. De lus wordt verlaten als $l groter wordt dan $h. De variabelen ontmoeten elkaar in het midden (oef0807.php / oef0807.jpg)

"; } ?> <?php
for ($l=1, $h = 10; $l<$h; $l++, $h--)
{echo $l . "  " . $h . "<br>"; }
?>

break

Terug naar de top

Break is een statement om een lus te beëindigen. Na break; gaat het script door vanaf het eerste statement dat volgt op de sluit-accolade."); if ($k= = 5) break; } ?> Deze code heeft volgend resultaat (oef0808.php / oef0808.jpg)

<?php
for($k=1; ; $k++) {
echo ("$k<br>");
if ($k= = 5)
break;
}
?>

Interessant aan dit voorbeeld is dat we in het ‘for’ statement geen drie expressies meer hebben vermeld (slechts 2 : $k=1 en $k++). De voorwaardelijke expressie wordt nu opgegeven, door een ‘if’ statement in de geneste statements. Het weglaten van ‘expressie2’ wordt vervangen door een extra puntkomma (; ;)

Oefening ‘tafel van vermenigvuldiging’

Terug naar de top

Even genoeg saaie (maar zo noodzakelijke) definities. Weer tijd voor een oefening. We gaan de tafel van 32 maken. Maar alleen de bewerkingen tussen 25 en 30 mogen worden weergegeven op het scherm. Dit moet u op het scherm krijgen (oef0809.php / oef0809.jpg):

Oplossing:

<?php
$getal=32;
for ($k=1; ; $k++){
if ($k>=25){
echo("$k maal $getal = ".($getal*$k)."<br>");
}
if($k>=30){
break;}
}
?>


Terug naar de top