Forum und email

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 (eigenelijk, 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 conditie maar één keer geëvalueerd, vervolgends wordt de uitkomst van deze evaluatie vergeleken met de verschillende case statements. Bij een elseif statement wordt de conditie per elseif geëvalueerd. 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 case matched met alles dat niet is gematched door eerdere cases. Bijvoorbeeld:

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 evalueert naar een simpel type; dit zijn integers, floating-point getallen en strings. Array's en objecten kunnen hier niet voor worden gebruikt.

De alternatieve syntax voor control structures 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;