PHP flow control

Binnen PHP heb je diverse mogelijkheden om het verloop van je programma van buitenaf te bepalen. Die zijn in te delen in twee secties, enerzijds beslissingen, anderszijds herhaling.

Beslissingen (conditions)

Beslissingen (in 't Engels: conditions) bepalen of een stuk code wel of niet uitgevoerd wordt, afhankelijk van het optreden van een bepaalde situatie. Men zegt ook wel: als er "aan een bepaalde conditie voldaan wordt" of dat bepaalde code "conditioneel wordt uitgevoerd".

if, else, elseif

Dit is de eenvoudigste vorm van een beslissing: als de conditie waar is
wordt de code tussen { en } uitgevoerd, ofwel in dit geval: als $a > $b
dan wordt de regel "a is groter dan b" geschreven. Als a niet groter is dan b,
dan gebeurt er niks.

  if($a > $b)
  {
    echo "a is groter dan b";
  }

Dit voorbeeld laat zien dat je ook iets kunt doen als a niet groter is dan b,
dat zet je dan tussen de {} haakjes na het 'else' statement:

  if($a > $b)
  {
    echo "a is groter dan b";
  }
  else
  {
    echo "a is kleiner dan b of gelijk aan b";
  }

switch

Met een switch kun je een keuze maken uit verschillende mogelijkheden. Kijk eerst eens naar het volgende stukje code:
  if($huisnummer == 1) {
    echo "Hier woont mevrouw Jansen";
  }
  elseif($huisnummer == 3) {
    echo "Hier woont de familie de Boer";
  }
  elseif($huisnummer == 5) {
    echo "Dit is een spookhuis";
  }
  else {
     echo "Dit huisnummer is onbekend";
  }
Met een switch ziet dat er veel overzichtelijker uit en het is bovendien efficienter omdat niet telkens de waarde van huisnummer hoeft te worden opgehaald en vergeleken:
  switch($huisnummer) {
     case 1: echo "Hier woont mevrouw Jansen";
     break;
     case 3: echo "Hier woont de familie de Boer";
     break;
     case 5: echo "Dit is een spookhuis";
     break;
     default:
     echo "Dit huisnummer is onbekend";
  }

Herhaling (loops)

Herhalingen (in 't Engels: loops) zijn stukjes code die herhaaldelijk uitgevoerd kunnen worden, tot er aan een bepaalde conditie voldaan wordt.

while

  $teller = 0;
  while($teller < 10)
  {
    echo "teller: $teller<br>"; 
    $teller++;
  }
teller: 0
teller: 1
teller: 2
teller: 3
teller: 4
teller: 5
teller: 6
teller: 7
teller: 8
teller: 9

While-loop met plaatjes

<?php
  $i=0;
  $eind=9;

  while($i <= $eind){
    echo "<img src='hkulogo.php?index=$i'>\n";
    $i++;
  } // while

?>

Het PHP-scriptje hkulogo.php dat het plaatje voorziet van een letter ziet er als volgt uit:

<?php
 header("Content-type: image/png");

  $im = ImageCreateFromPNG ("hku.png"); // Open existing png-file

  $tc  = ImageColorAllocate ($im, 255, 0, 0); // define drawing color for text

  $idx = $_GET['index']; // pull 'index' from the GET-array

  ImageChar($im, 5, 20, 20, $idx, $tc); // draw a character on top of the image

  ImagePNG($im); // create resulting image

  ImageDestroy($im); // free memory
?>

Hier vind je meer informatie over tekenen met PHP

do...while

  $teller = 0;
  do {
    echo "teller: $teller<br>"; 
    $teller++;
  } while($teller < 10)
Teller: 0
Teller: 1
Teller: 2
Teller: 3
Teller: 4
Teller: 5
Teller: 6
Teller: 7
Teller: 8
Teller: 9

Het verschil tussen while(){...} en do{...}while() zit erin dat de code binnen de {} haakjes van do{...}while() altijd minimaal 1 keer wordt uitgevoerd en bij while(){...} kan het ook gebeuren dat het helemaal niet wordt uitgevoerd. Dat ligt aan het punt waarop de beslissing wordt genomen om te stoppen met de loop, bij while(){...} is dat al aan het begin en bij do{...}while() pas aan het eind, dus wanneer de code al 1 keer is uitgevoerd.

for

Tussen de haakjes van een for-loopje staan drie stukjes PHP-code:
for(initialisatie; conditie; increment) { doe iets }
Met iteratie bedoelen we het uitvoeren van alle code die staat tussen de { en } na het for-statement.

Een veel voorkomende toepassing van 'for' is een teller te maken die een aantal waarden doorloopt:

  for($teller = 0; $teller < 10; $teller++)
  {
    echo "teller: $teller<br>"; 
  }

For-loop met plaatjes

<?php
  $begin=1;
  $eind=9;

  for($i=$begin; $i<=$eind && $i<10; $i++){
    echo "<img src='hkulogo.php?index=$i'>\n";
  }
?>

break, continue

De break hadden we al gezien in de switch. Een ander voorbeeld:
  $teller = 0;
  while($teller < 10)
  {
    echo "teller: $teller<br>"; 
    $teller++;
    if($teller==5) break;
  }

teller: 0
teller: 1
teller: 2
teller: 3
teller: 4

Flow charts

In een flow chart geef je de 'flow' van je programma aan. Alle punten waarbij je een beslissing neemt of je een bepaald stuk code wel of niet uitvoert zijn hierin verwerkt. Zo krijg je een duidelijk beeld van alle verschillende paden die je programma kan doorlopen. Een voorbeeldje:

foreach

$stad[0] = "Hilversum";
$stad[1] = "Amsterdam";
$stad[2] = "Utrecht";

foreach($stad as $s) echo "De volgende stad is... $s<br>";
De volgende stad is... Hilversum
De volgende stad is... Amsterdam
De volgende stad is... Utrecht