Statements 1. if
2. else
3. elseif
4. Alternatieve syntax voor control structures
5. while
6. do..while
7. for
8. foreach
9. break
10. continue
11. switch
12. include()
Inleiding
Elk PHP script bestaat uit reeksen van statements. Een statement kan een assignment, een functie aanroep, een loop, een conditional statement of zelfs een statement zijn dat niets doet (een empty statement). Statements eindigen gewoonlijk met een puntkomma. Als toevoeging hierop kunnen statements gegroepeerd worden tot een statement-groep door deze te omvatten met accolades. Een statement-groep is een statement op zichzelf. De overige statements zijn beschreven in dit hoofdstuk.
top
1. if
De if constructie is één van de meest belangrijkste in veel talen, zoals ook in PHP. Het maakt het mogelijk om stukken code conditioneel uit te voeren. PHP heeft een if structuur die gelijk is als die van de taal C.
<?php
if (voorwaarde) {
script
}
?>
|
Of het script-gedeelte wordt uitgevoerd is afhankelijk van de voorwaarde. Als er aan de voorwaarde wordt voldaan (=TRUE), wordt het scriptgedeelte uitgevoerd.
Het volgende voorbeeld zal bijvoorbeeld tonen "a is groter" dan b indien $a groter is dan $b:
<?
if ($a > $b)
print "a is groter dan b";
?> |
Je kan ook meerdere scripts uitvoeren binnen een voorwaarde, zoals dit:
<?
if ($a > $b) {
if($c == $d) {
if($e < $f) {
echo "e is gelijk aan f!";
}
echo "c is gelijk aan d";
}
}
?>
|
Je kan oneindig veel if-lussen gaan maken, maar houd er wel rekening mee dat dit tijd kost.
top
2. else
Je kan nu al een script laten uitvoeren als er aan een voorwaarde is voldaan, maar wat als het nu niet zo is (= FALSE)? Daarvoor dien dan else:
<?
if ($a > $b) {
print "a is groter dan b";
} else {
print "a is NIET groter dan b";
}
?> |
Om dit te begrijpen lees je het gewoon: als $a groter is dan $b, dan zeg je "a is groter dan b", anders zeg je "a is NIET groter dan b".
top
3. elseif
elseif, zoals de naam al suggereerd is een combinatie van de if en de else. Net zoals de else, breidt het de if uit met de mogelijkheid om een ander statement uit te voeren als de if expressie FALSE is. In tegenstelling tot else zal elseif het statement alleen uitvoeren als de elseif expressie wel TRUE is.
<?
if ($a > $b) {
print "a is groter dan b";
} elseif ($a == $b) {
print "a is gelijk aan b";
} else {
print "a is kleiner dan b";
}
?> |
Als a groter is dan b, dan zeg je "a is groter dan b". Als het niet zo is, maar a is gelijk aan b, dan zeg je "a is gelijk aan b". Als het dat ook niet is, dan zeg je "a is kleiner dan b".
Je kan oneindig veel elseif gaan gebruiken.
Een elseif wordt dus alleen maar uitgevoerd als alles dat ervoor komt FALSE is, en de huidige TRUE.
top
4. Alternatieve syntax voor control structures
PHP bied een alternative syntax voor sommige control structures; namelijk voor if, while, for, foreach en switch. De alternatieve syntax verkrijg je door het vervangen van de openingsaccolade door een dubbele punt (:) en de sluit accolade door respectivelijk endif;, endwhile;, endfor;, endforeach; of endswitch;.
<?php
if ($a == 5): ?>
A is gelijk aan 5
<?php endif; ?>
|
In het bovenstaande voorbeeld is het HTML block "A is gelijk aan 5" genest binnen een if statement, dat geschreven is in de alternative syntax. Het HTML blok wordt alleen getoond indien $a gelijk is aan 5.
De alternatieve syntax is ook te gebruiken voor else en elseif. Het volgende is een if structuur met elseif en else in het alternatieve formaat:
<?
if ($a == 5):
print "a is gelijk aan 5";
print "...";
elseif ($a == 6):
print "a is gelijk aan 6";
print "!!!";
else:
print "a is niet gelijk aan 5 of 6";
endif;
?>
|
Zie ook while, for, en if voor meer voorbeelden.
top
5. while
while loops zijn de eenvoudigste manier van loops in PHP. De basis vorm van een while statement is
<?
while (expressie) statement
?>
|
De bedoeling van het while statement is eenvoudig.
Het statement wordt uitgevoerd tot het FALSE is. De expressie wordt steeds opnieuw gecontroleerd.
Net zoals met het if statement, kun je meerdere statements uitvoeren binnen dezelfde while loop, door een groep van statements te omvatten met accolades, of door de alternatieve syntax te gebruiken:
<?
while (expressie): statement ... endwhile;
?>
|
De volgende voorbeelden zijn identiek en zullen beide de getallen van 1 tot 10 laten zien:
<?
/* voorbeeld 1 */
$i = 1;
while ($i <= 10) {
print $i++; /* De waarde wordt getoond voordat deze
wordt opgehoogt (post-increment) */
}
/* voorbeeld 2 */
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
?>
|
top
6. do..while
do..while loops lijken erg veel op while loops, alleen wordt het statement gecontroleerd op het einde van een loop, niet in het begin zoals bij while.
Op die manier wordt er dus minstens één loop uitgevoerd, of het statement nu juist is of niet.
Er is maar één systax voor do..while loops:
<?
$i = 0;
do {
print $i;
} while ($i > 0);
?>
|
De bovenstaande loop wordt een keer uitgevoerd, want het script komt pas op het einde van de loop tot de conclusie dat $i helemaal niet groter is dan 0.
top
7. for
for loops zijn de meest complexe loops in PHP. De syntax van een for loop is:
<?
for (expr1; expr2; expr3) statement
?>
|
De eerste expressie (expr1) wordt exact één keer uitgevoerd aan het begin van de loop.
Aan het begin van elke loop wordt expr2 gecontroleerd. Als deze evalueert tot TRUE, dan gaat de loop verder en worden de geneste statements uitgevoerd. De uitvoering van de loop stopt als de expressie gelijk is aan FALSE.
Aan het einde van elke loop wordt expr3 uitgevoerd.
Elk van de drie expressies mag leeg zijn. Als expr2 leeg is dan betekend dat dat de loop oneindig zal lopen (PHP neemt aan dat als de tweede expressie leeg is, de expressie de waarde TRUE heeft).
Neem de volgende voorbeelden. Elk van deze zal de nummers 1 tot 10 afdrukken:
<?
/* voorbeeld 1 */
for ($i = 1; $i <= 10; $i++) {
print $i;
}
/* voorbeeld 2 */
for ($i = 1;;$i++) {
if ($i > 10) {
break;
// dankzij break wordt de loop, die anders oneindig zou zijn, onderbroken
}
print $i;
}
/* voorbeeld 3 */
$i = 1;
for (;;) {
if ($i > 10) {
break;
// dankzij break wordt de loop, die anders oneindig zou zijn, onderbroken
}
print $i;
$i++;
}
/* voorbeeld 4 */
for ($i = 1; $i <= 10; print $i, $i++) ;
?>
|
Natuurlijk lijkt het eerste voorbeeld het netste (of misschien het vierde), maar je zult zien dat het leeglaten van expressie in de for loops toch vaak handig kan zijn.
PHP heeft ook een "dubbele punt syntax" voor for loops.
<?
for (expr1; expr2; expr3): statement; ...; endfor;
?>
|
top
8. foreach
PHP 4 (maar PHP 3 niet) heeft een foreach construct, dit geeft een makkelijke manier om door een array te lopen. Er zijn twee syntaxes, de tweede is een kleine, maar handige, uitbreiding op de eerste:
<?
foreach(array_expressie as $waarde) statement
foreach(array_expressie as $key => $waarde) statement
?>
|
De eerste vorm loopt door de array, aangegeven met array_expressie. In elke loop wordt de waarde van het huidige element in $waarde geplaatst en wordt de interne array pointer één positie verder gezet (zodat in de volgende loop het volgende element wordt opgehaald).
De tweede vorm werkt precies zo, alleen zal de key van het element ook nog eens aan de variabele $key gekoppeld zijn.
Opmerking: Als foreach begint met het doorlopen van de array, dan wordt de interne array pointer automatisch gereset naar het eerste element van de array. Dit betekend dat je niet eerst reset() hoeft te gebruiken voor een foreach loop.
Opmerking: foreach ondersteunt het onderdrukken van errors niet met '@'
De volgende twee voorbeelden zijn functioneel identiek aan elkaar:
<?
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Waarde: $value<br>n";
}
foreach ($arr as $value) {
echo "Waarde: $value<br>n";
}
?>
|
De volgende zijn ook functioneel aan elkaar:
<?
reset ($arr);
while (list($key, $value) = each ($arr)) {
echo "Key: $key; Waarde: $value<br>n";
}
foreach ($arr as $key => $value) {
echo "Key: $key; Waarde: $value<br>n";
}
?>
|
Hier volgen nog wat meer voorbeelden van het gebruik van deze functie:
<?
/* foreach voorbeeld 1: alleen de waarde */
$a = array (1, 2, 3, 17);
foreach ($a as $v) {
print "Huidige waarde van $a: $v.n";
}
/* foreach voorbeeld 2: waarde (samen met de key ter illustratie) */
$a = array (1, 2, 3, 17);
$i = 0; /* alleen ter illustratie */
foreach($a as $v) {
print "$a[$i] => $k.n";
}
/* foreach voorbeeld 3: key en waarde */
$a = array (
"een" => 1,
"twee" => 2,
"drie" => 3,
"zeventien" => 17
);
foreach($a as $k => $v) {
print "$a[$k] => $v.n";
?>
|
Als je dit niet begrijpt is het geen ramp, zonder foreach kan je ook speciale dingen scripten.
top
9. break
break stopt de uitvoering van de huidige for, while, of switch structuur.
break accepteert een optioneel numeriek argument waarmee wordt aangegeven uit hoeveel geneste blokken moet worden teruggekeerd.
<?
$arr = array ('een', 'twee', 'drie', 'vier', 'stop', 'vijf');
while (list (, $val) = each ($arr)) {
if ($val == 'stop') {
break; /* Je had hier ook kunnen schrijven: 'break 1;' */
}
echo "$val<br>n";
}
/* Gebruikmakend van het optionele argument. */
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "Op 5<br>n";
break 1; /* Breek alleen uit de switch. */
case 10:
echo "Op 10: stoppen<br>n";
break 2; /* Breek uit de switch en de while. */
default:
break;
}
}
?>
|
top
10. continue
continue wordt binnen loop structuren gebruikt om de rest van de loop niet uit te voeren, en vervolgens de loop opnieuw laten te beginnen.
continue accepteert een optioneel argument dat aangeeft voor hoeveel levels van geneste loops naar het einde moet worden gesprongen.
<?php
while (list ($key, $value) = each ($arr)) {
if (!($key % 2)) { // sla oneven cijfers over
continue;
}
doe_iets_nuttigs ($value);
}
$i = 0;
while ($i++ < 5) {
echo "Outer<br />n";
while (1) {
echo " Middle<br />n";
while (1) {
echo " Inner<br />n";
continue 3;
}
echo "Dit wordt nooit uitgevoerd<br />n";
}
echo "En dit ook niet.<br />n";
}
?>
|
top
11. switch
Het switch statement is gelijk aan een serie van IF statements met dezelfde expressie. Op veel plaatsen zul je dezelfde variabele (of expressie) willen vergelijken met meerdere waardes, en zul je een stuk code willen uitvoeren, dat afhangt van de waarde waarmee de expressie overeenkomt. Dit is precies waar het switch statement voor is.
De volgende twee voorbeelden zijn twee verschillende manieren om hetzelfde te doen, de één met een serie if statements, de andere met behulp van het switch statement:
<?
if ($i == 0) {
print "i is gelijk aan 0";
}
if ($i == 1) {
print "i is gelijk aan 1";
}
if ($i == 2) {
print "i is gelijk aan 2";
}
switch ($i) {
case 0:
print "i is gelijk aan 0";
break;
case 1:
print "i is gelijk aan 1";
break;
case 2:
print "i is gelijk aan 2";
break;
}
?>
|
Het is belangrijk om te begrijpen hoe het switch statement precies werkt om fouten te voorkomen. Het switch statement voert regel voor regel (eignelijk, statement voor statement) uit. In het begin wordt er geen code uitgevoerd. Alleen als er een case statement wordt gevonden met een waarde die overeenkomt met de waarde van de switch expressie begint PHP met het uitvoeren van statements. PHP gaat net zolang door met het uitvoeren van statements tot het einde van het switch blok, of totdat het voor de eerste keer een break statement tegenkomt. Als je geen break statement gebruikt aan het einde van de statement list die bij de "case" hoort, zal PHP doorgaan met het uitvoeren van statements die bij volgende cases horen. Zie het volgende voorbeeld:
<?
switch ($i) {
case 0:
print "i is gelijk aan 0";
case 1:
print "i is gelijk aan 1";
case 2:
print "i is gelijk aan 2";
}
?>
|
Als in het bovenstaande voorbeeld $i gelijk is aan 0, zal PHP alle print statements uitvoeren! Als $i gelijk is aan 1, dan zal PHP de laatste twee print statements uitvoeren. Alleen als $i gelijk is aan 2, krijg je het 'gewenste' resultaat, dan wordt namelijk alleen het laaste print statement uitgevoerd. Het is dus belangrijk om geen break statements te vergeten. (Onder bepaalde omstandigeheden kan het weglaten van de break statements juist wel nuttig zijn, zoals het voorbeeld hieronder laat zien.
In een switch statement, wordt de voorwaarde maar één keer bekeken, daarna wordt de uitkomst van deze controle vergeleken met de verschillende case statements. Bij een elseif statement wordt de conditie per elseif geevalueerd. Dit betekent dat je, als je een gecompliceerde evaluatie hebt, het gebruik van een switch statement wellicht sneller zou werken.
De statement list voor een case kan ook leeg zijn, op deze manier zal de controle meteen worden doorgegeven aan de volgende case:
<?
switch ($i) {
case 0:
case 1:
case 2:
print "i is kleiner dan 3 maar niet negatief";
break;
case 3:
print "i is 3";
}
?>
|
De default case is een speciale. Deze komt overeen met alles wat niet met de voorgaande overeenkomt. Voorbeeldje:
<?
switch ($i) {
case 0:
print "i is gelijk aan 0";
break;
case 1:
print "i is gelijk aan 1";
break;
case 2:
print "i is gelijk aan 2";
break;
default:
print "i is niet gelijk aan 0, 1 of 2";
}
?>
|
De case expressie mag elke expressie zijn die evalueerd toe een simpel type, dit zijn integers, floating-point getallen en strings. Array's en objecten kunnen hier niet voor worden gebruikt.
De alternative syntax wordt ook ondersteund voor switches. Voor meer informatie, zie Alternatieve syntax voor control structures .
<?switch ($i):
case 0:
print "i is gelijk aan 0";
break;
case 1:
print "i is gelijk aan 1";
break;
case 2:
print "i is gelijk aan 2";
break;
default:
print "i is niet gelijk aan 0, 1 of 2";
endswitch;
?>
|
top
12. include();
Het include() statement voegt het aangegeven bestand in.
Als de "URL fopen wrappers" zijn ingeschakeld (in de default configuratie is dit het gevel), dan kun je een file ook include()n met een URL, in plaats van een lokale path naam. Zie Remote files en fopen() voor meer informatie hierover.
Voorbeeldje:
<?
include("http://www.sitemasters.be/pagina.php");
?>
|
Een belangrijke opmerking plaatsen we hier over bestanden die worden ge-include()ed of ge-require()ed. Deze functies zorgen er beide voor dat de parser PHP mode verlaat en overgaat in HTML mode voor de opgegeven files aan het begin van het bestand, en aan het einde van dit bestand weer in PHP mode overgaat. Daarom moet de inhoud van deze bestanden worden omgeven met geldige PHP begin en einde tags.
Dit gebeurd iedere keer als include() statement wordt tegegekomen, daarom kun je met een include() in een loop structuur een aantal verschillende files invoegen.
<?
$files = array ('first.inc', 'second.inc', 'third.inc');
for ($i = 0; $i < count($files); $i++) {
include $files[$i];
}
?>
|
Omdat include() een speciale taal constructie is, ben je verplicht deze te omgeven met een statement blok als het include() statement zich in een voorwaardelijk constructie bevind:
<?
/* Dit is FOUT en zal niet werken zoals het bedoeld is */
if (voorwaarde)
include($bestand);
else
include($overig);
/* Dit is GOED. */
if (voorwaarde) {
include($bestand);
} else {
include($overig);
}
?>
|
In zowel PHP 3 als PHP 4, is het mogelijk om een return statement uit te voeren in een ge-include() file, om bijvoorbeeld een fout terug tegeven aan het script wat het bestand uitvoerde. Er zijn wel verschillend in de manier waarop dit werkt. Het eerste verschil is dat in PHP 3 het return zich niet binnen een blok mag bevinden, tenzij het een functie blok betreft. In dit laatste geval heeft het return statement betrekking op de functie natuurlijk, en niet op de gehele file. In PHP 4 bestaat deze restrictie echte niet. Het is in PHP 4 ook mogelijk om waardes terug te geven van uit include()d files. Je kunt dan de return waarde van het include() statement gebruiken net zoals een gewone functie. In PHP 3 zal dit een parse error genereren.
Neem aan dat het volgende bestand bestaat (genoemd test.inc) en dat deze zich in dezelfde directory bevind als het hoofd script:
<?
echo "Voor de return <br>n";
if (1) {
return 27;
}
echo "Na de return <br>n";?>
|
Neem aan dat het hoofd script, (main.php) het volgende bevat:
<?php
$retval = include ('test.inc');
echo "File returned: '$retval'<br>n";
?>
|
top
Pfffffff voor zover mijn TUT, hoop dat er een hoop duidelijkheid instaat en dat jullie weer verder kunnen met PHP Leer [karate] Bedankt aan Murfy voor het opmaken van mijn tutorial.
|