Forum und email

switch

Die switch-Anweisung ist gleichbedeutend einer Reihe von if-Anweisungen mit dem gleichen Parameter. Häufig wollen Sie ein und dieselbe Variable (bzw. den selben Ausdruck) mit verschiedensten Werten vergleichen und in Abhängigkeit vom Auswertungsergebnis verschiedene Programmteile ausführen. Genau das ermöglicht die switch-Anweisung.

Hinweis: Beachten Sie bitte, dass im Unterschied zu anderen Programmiersprachen die continue Anweisung auch bei switch ihre Gültigkeit hat und ähnlich wie break funktioniert. Falls Sie switch innerhalb einer Schleife verwenden und mit dem nächsten Durchlauf der äußeren Schleife beginnen möchten, verwenden Sie continue 2.

Das folgende Beispiele zeigt Ihnen zwei verschiedene Möglichkeiten auf, das Gleiche zu erreichen. Einmal werden if und elseif Anweisungen benutzt, das andere Mal eine switch-Anweisung:

<?php
if ($i == 0) {
    echo 
"i ist gleich 0";
} elseif (
$i == 1) {
    echo 
"i ist gleich 1";
} elseif (
$i == 2) {
    echo 
"i ist gleich 2";
}

switch (
$i) {
case 
0:
    echo 
"i ist gleich 0";
    break;
case 
1:
    echo 
"i ist gleich 1";
    break;
case 
2:
    echo 
"i ist gleich 2";
    break;
}
?>

Es ist wichtig, die Ausführung einer switch-Anweisung zu verstehen, um Fehler zu vermeiden. Die switch-Anweisung wird Zeile für Zeile (also Anweisung für Anweisung) abgearbeitet. Zu Beginn wird kein Code ausgeführt. Erst wenn bei einem case-Teil eine Entsprechung zum switch-Ausdruck vorliegt, werden die darin enthaltenen Anweisungen von PHP ausgeführt. PHP fährt dann mit der Abarbeitung des restlichen Codes innerhalb des switch-Blocks fort oder bis zum ersten Auftreten einer break-Anweisung. Ohne break am Ende eines case-Teils werden also noch die folgenden case-Blöcke ausgeführt. Zum Beispiel:

<?php
switch ($i) {
case 
0:
    echo 
"i ist gleich 0";
case 
1:
    echo 
"i ist gleich 1";
case 
2:
    echo 
"i ist gleich 2";
}
?>

Wenn hier $i gleich 0 ist, würde PHP alle echo Anweisungen ausführen! Ist $i gleich 1, werden die letzten beiden echo Anweisungen ausgeführt. Nur wenn $i gleich 2 ist, erhalten Sie das erwartete Ergebnis: die Ausgabe von "i ist gleich 2". Deshalb ist es wichtig break-Anweisungen zu setzen (abgesehen von bestimmten Fällen, in denen Sie diese mit Absicht weglassen).

Bei einer switch-Anweisung wird die Bedingung also nur einmal überprüft und das Ergebnis mit jeder case-Anweisung verglichen. Bei einer elseif-Anweisung wird die Bedingung neu geprüft. Ist ihre Bedingung komplizierter als ein einfacher Vergleich und/oder in einer umfangreichen Schleife eingebettet, kann eine switch-Anweisung schneller sein.

Der Anweisungsteil von case kann auch leer sein. Dann wird die Kontrolle einfach an den nächsten case-Teil übergeben.

<?php
switch ($i) {
case 
0:
case 
1:
case 
2:
    echo 
"i ist kleiner als 3 aber nicht negativ";
    break;
case 
3:
    echo 
"i ist gleich 3";
}
?>

Ein Spezialfall ist default. Dieser Fall trifft auf alles zu, was nicht von den voranstehenden case-Ausdrücken erfasst wurde und sollte als letzte case Anweisung angegeben werden. Zum Beispiel:

<?php
switch ($i) {
case 
0:
    echo 
"i ist gleich 0";
    break;
case 
1:
    echo 
"i ist gleich 1";
    break;
case 
2:
    echo 
"i ist gleich 2";
    break;
default:
    echo 
"i ist weder 0, 1 noch 2";
}
?>

Der case-Ausdruck kann eine Prüfung einfacher Typen sein, also von Integer- oder Fließkomma-Zahlen oder von Strings/Zeichenketten. Arrays oder Objekte können nicht benutzt werden, es sei denn, sie wurden in einfache Typen umgewandelt.

Die alternative Syntax der Kontrollstrukturen gilt auch für switch-Sequenzen. Mehr Informationen dazu erhalten Sie unter Alternative Syntax für Kontroll-Strukturen.

<?php
switch ($i):
case 
0:
    echo 
"i ist gleich 0";
    break;
case 
1:
    echo 
"i ist gleich 1";
    break;
case 
2:
    echo 
"i ist gleich 2";
    break;
default:
    echo 
"i ist weder 0, 1 noch 2";
endswitch;
?>