Programmeren in PHP/Beslissingsstructuren

Uit Wikibooks
Naar navigatie springen Naar zoeken springen

Programmeren in PHP


  1. Inleiding
  2. Een webserver installeren
  3. Syntax
  4. Variabelen
  5. Beslissingsstructuren
  6. Constanten
  7. Rekenen
  8. Loops
  9. Includes
  10. Functies
  11. Gebruikersinvoer
  12. I/O in PHP
  13. Klassen in PHP 4
  14. Klassen in PHP 5
  15. MySQL en PHP
  16. Reguliere Expressies


Bij een script moet je vaak keuzes laten maken. Dit kan met behulp van verschillende beslissingsstructuren. Een script waar keuzes veel gebruikt worden is een inlog-script. Hierbij moet er gekeken worden of de door de gebruiker gegeven loginnaam en wachtwoord bekend zijn in het systeem en beide kloppen. Afhankelijk of de login correct is, kan de gebruiker welkom worden geheten of kan er een bericht worden terug gestuurd dat zegt dat de loginnaam of het wachtwoord fout waren. Om een keuze te kunnen maken moeten er waarden vergeleken worden. Hiervoor zijn er vergelijkings-operators. De meeste hiervan zullen hieronder eerst worden uitgelegd.

Vergelijkingsoperators[bewerken]

In de voorgaande hoofdstukken zijn er al een aantal operators voorbij gekomen, zoals . (concatenating, strings aan elkaar plakken), de +-*/% operators (wiskundige operators: optellen, aftrekken, vermenigvuldigen, delen en modulo) en de = operator (toekenning van waarden aan variabelen). Als je goed naar de verschillende operators kijkt, zie je dat ze allemaal wat doen met de code ervoor en erna. De wiskundige operator + telt bijvoorbeeld de waarde er voor en erna bij elkaar op.

Modulo (%) is een handige functie om de restwaarde te controleren na deling van twee getallen.

PHP-code: Modulo berekening

$getal1 = 13; // Integer
$getal2 = 5;  // Integer

// Modulo uitvoeren: 13 % 5
$totaal = $getal1 % $getal2;

// Geeft als resultaat 3
echo $totaal;

PHP geeft na 13 % 5 een resultaat van 3. Het getal 5 past in zijn geheel 2 keer in het getal 13, waarna 3 overblijft.

Vergelijkingsoperators doen, net als de andere operators, iets met de waarde die ervoor en erna komt. In dit geval vergelijken ze, logischer wijs, de verschillende waarden met elkaar. In de tabel hieronder staan de meest gebruikte operators. In de volgende paragraaf zal er een voorbeeld worden gegeven hoe je ze kan gebruiken.

Operator Betekenis
== Gelijk aan
!= Niet gelijk aan
=== Identiek aan (type controle)
!== Niet identiek aan (type controle)
> Groter dan
< Kleiner dan
>= Gelijk aan, of groter dan
<= Gelijk aan, of kleiner dan

If-elseif-else statements[bewerken]

Een if statement (en bijbehorende elseif en else statements) zijn de meest voorkomende statements om te kijken of er aan een bepaalde conditie is voldaan. Zo kan je bijvoorbeeld kijken of een getal hoger of lager is dan een ander getal.

PHP-code: If-elseif-else

<?php
$a = 4;
$b = 2;
//Kijk of $a gelijk is aan $b
if ($a == $b)
{
    echo '$a(' . $a . ') is gelijk aan $b(' . $b . ')!';
}
//Als $a niet gelijk is aan $b, kijk of $a misschien hoger is dan $b
elseif ($a > $b)
{
    echo '$a(' . $a . ') is groter dan $b(' . $b . ')!';
}
//Als $a niet hoger is dan $b EN niet hetzelfde is als $b moet $a wel kleiner zijn dan $b
else
{
    echo '$a(' . $a . ') is kleiner dan $b(' . $b . ')!';
}
?>

Onder de condities valt dus $a == $b en $a > $b in dit voorbeeld. Tip: probeer de waardes van $a en $b ook eens aan te passen, zodat je de effecten van de condities kan zien.

Typecontrole hierboven in de tabel geeft aan dat niet alleen de inhoud van de twee vergeleken variabelen van belang is, maar ook het type. In PHP heeft bijvoorbeeld de constante FALSE de waarde 0 en TRUE de waarde 1. Zou je dan dit doen:

PHP-code: '==' operator (gelijk aan)

if(TRUE==1)
{
   echo "JA";
}
else
{
   echo "NEE";
}

Dan zou er "JA" uitkomen. Doe je het echter met de operatoren die letten op de types van de variabelen, dan komt er "NEE" uit:

PHP-code: '===' operator (identiek aan)

if(TRUE===1)
{
   echo "JA";
}
else
{
   echo "NEE";
}

Ook nog even meegeven dat het if statement enkel een boolean kan evalueren. Wanneer je dan een variabele gebruikt die al een boolean is, hoef je geen extra controle meer te doen.

PHP-code: boolean-variabelen in een if statement

$blnWaar = TRUE;

if($blnWaar)
{
   echo "JA";
}
else
{
   echo "NEE";
}

Bij vergelijkingsoperators kreeg je te maken met het begrip 'Modulo'. Hierbij kan je heel simpel de rest nagaan. Nu vraag je je waarschijnlijk af wat je hiermee kan doen. Soms kan het handig zijn om te controleren of het getal nu even of oneven is (of een dergelijke toepassing). Hieronder zie je een voorbeeldje:

PHP-code: Modulo controle: even of oneven

<?php

$getal = 7; // Integer

if($getal % 2) {
   echo 'Getal is oneven';
}else{
   echo 'Getal is even';
}

?>

Op de pagina zal er 'Getal is oneven' verschijnen. Wanneer je de variabel $getal wijzigt naar 8, krijg je de melding 'Getal is even'. Meer informatie over modulo (of een functie van bovenstaande if-statement) kan je terug vinden in Programmeren in PHP/Rekenen

Switch statements[bewerken]

Als je voor maar een variabele hoeft te kijken aan welke waarde hij/zij voldoet kun je met if en elseif's gaan werken, maar dit levert meestal rommelige code op, die meestal wat moeilijker te volgen is. Daar is het switch-statement voor.

PHP-code:

<?php
$a = 9;
// Voorbeeld om switch werking aan te geven.
switch ($a)
{
    case 1:
           echo "$a is gelijk aan 1";
           break;
    case 2:
           echo "$a is gelijk aan 2";
           break;
    case 9:
           echo "$a is gelijk aan 9";
           break;
    default:
           echo "$a is niet gelijk aan 1, 2 of 9";
}
?>

Zoals je ziet wordt een switch-statement vaak gebruikt om te kijken of een variabele gelijk is aan een waarde. Je kan ook condities gebruiken in de case statements maar het is beter om dat te voorkomen en in zo'n geval een if - else if - else constructie te gebruiken.

Let er ook op dat je telkens als je klaar bent in een 'case' dat je dan een break; neerzet om te voorkomen dat er door wordt gegaan met de volgende 'case'. Bij een "default" hoeft over het algemeen geen "break", omdat deze toch als laatste staat.

Door slim om te gaan met je gebruikte break statements en een kleine codeaanpassing kan je de bovenstaande switch statement ook als volgt implementeren:

PHP-code:

<?php
$a = 9;
switch ($a)
{
    case 1:
    case 2:
    case 9:
           echo $a . 'is gelijk aan ' . $a;
           break;
    default:
           echo $a . 'is niet gelijk aan 1, 2 of 9';
}
?>

De if-else expressie[bewerken]

De if-else expressie is een iets moeilijker leesbare versie van het normale if-else statement, deze wordt meestal gebruikt om snel verschillende waarden aan een variabele toe te kennen, een voorbeeld hiervan is:

PHP-code: if-else expressie

<?php
$a = 1;
$b = ($a == 1 ? '$a is gelijk aan 1' : '$a is niet gelijk aan 1');
echo $b;
?>

Hier staat dus hetzelfde als:

PHP-code: if-else statement met dezelfde betekenis als de expressie hierboven

<?php
$a = 1;
if ($a == 1)
{
    $b = '$a is gelijk aan 1';
}
else
{
    $b = '$a is niet gelijk aan 1';
}
echo $b;
?>


Zoals je ziet is in dit geval de expressie korter en dus makkelijker dan het statement. Deze expressie heeft echter een nadeel: Bij het gebruik met meer dan twee mogelijkheden zijn (zoals in het eerste voorbeeld op deze pagina) moeten er meerdere expressies binnen elkaar worden gebruikt. Dit is mogelijk, maar een stuk ingewikkelder. Als je dit doet, let er dan op dat de verschillende expressies goed genest zijn en gebruik altijd haakjes. Als de expressie erg ingewikkeld wordt, is het vaak beter om een if-else statement te gebruiken. Hieronder staat het voorbeeld van bovenaan deze pagina, maar dan met een expressie:

PHP-code: if-else expressie met meer dan 2 mogelijkheden

<?php
$a = 4;
$b = 2;

echo ($a == $b ? '$a gelijk aan $b' : ($a > $b ? '$a groter dan $b' : '$a kleiner dan $b'));
?>


Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.