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 .

Die folgenden zwei Beispiele zeigen zwei verschiedene Wege , das Gleiche zu bewirken ; eines gebraucht mehrere if -Anweisungen , das andere eine switch -Anweisung :

 
if

 
(

 
$i

 
==

 
0

 
)

 
{

 
print

 
"i

 
ist

 
gleich

 
0"

 
;

 
}

 
if

 
($i

 
==

 
1

 
)

 
{

 
print

 
"i

 
ist

 
gleich

 
1"

 
;

 
}

 
if

 
($i

 
==

 
2

 
)

 
{

 
print

 
"i

 
ist

 
gleich

 
2"

 
;

 
}

 
switch

 
($i

 
)

 
{

 
case

 
0

 
:

 
print

 
"i

 
ist

 
gleich

 
0"

 
;

 
break

 
;

 
case

 
1

 
:

 
print

 
"i

 
ist

 
gleich

 
1"

 
;

 
break

 
;

 
case

 
2

 
:

 
print

 
"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 nichts 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 :

 
switch

 
(

 
$i

 
)

 
{

 
case

 
0

 
:

 
print

 
"i

 
ist

 
gleich

 
0"

 
;

 
case

 
1

 
:

 
print

 
"i

 
ist

 
gleich

 
1"

 
;

 
case

 
2

 
:

 
print

 
"i

 
ist

 
gleich

 
2"

 
;

 
}





Wenn hier $i gleich 0 ist , würde PHP alle print-Anweisungen ausführen ! Ist $i gleich 1 , werden die letzten beiden print-Befehle ausgeführt und wenn $i = 2 ist , wird nur der letzte print-Befehl ausgeführt . 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 einem elseif -Befehl 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 als mehrere if -Befehle sein .

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

 
switch

 
(

 
$i

 
)

 
{

 
case

 
0

 
:

 
case

 
1

 
:

 
case

 
2

 
:

 
print

 
"i

 
ist

 
kleiner

 
als

 
3

 
aber

 
nicht

 
negativ"

 
;

 
break

 
;

 
case

 
3

 
:

 
print

 
"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 :

 
switch

 
(

 
$i

 
)

 
{

 
case

 
0

 
:

 
print

 
"i

 
ist

 
gleich

 
0"

 
;

 
break

 
;

 
case

 
1

 
:

 
print

 
"i

 
ist

 
gleich

 
1"

 
;

 
break

 
;

 
case

 
2

 
:

 
print

 
"i

 
ist

 
gleich

 
2"

 
;

 
break

 
;

 
default

 
:

 
print

 
"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 .

 
switch

 
(

 
$i)

 
:

 
case

 
0

 
:

 
print

 
"i

 
ist

 
gleich

 
0"

 
;

 
break

 
;

 
case

 
1

 
:

 
print

 
"i

 
ist

 
gleich

 
1"

 
;

 
break

 
;

 
case

 
2

 
:

 
print

 
"i

 
ist

 
gleich

 
2"

 
;

 
break

 
;

 
default

 
:

 
print

 
"i

 
ist

 
weder

 
0

 
,

 
1

 
noch

 
2"

 
;

 
endswitch

 
;