Im Kapitel zu if, else if, else habe ich schon angesprochen, dass man statt einer Reihe von „else if“-Abfragen besser ein Switch-Konstrukt nutzt.
<?php
switch($zahl) {
case 0:
echo 'Durch 0 darf man nicht teilen';
break;
case 1:
echo 'Die Zahl 1 ist sehr klein';
break;
case 99999:
echo 'Das ist eine sehr große Zahl';
echo 'kurz vor hunderttausend';
break;
}
?>
Switch ist dafür gedacht, eine Variable auf mehrere Werte zu prüfen und für den jeweiligen Wert, einen unterschiedlichen Code auszuführen. Das selbe könnte man auch mit mehreren „else if“-Abfragen bewerkstelligen, doch switch ist dafür aufgrund seiner Struktur übersichtlicher. Der Code ist schnell erklärt:
- switch erwartet eine Variable und prüft dann den Wert
- für jeden Wert kann ein „case“ angelegt werden
- das „break;“ nach jeder Anweisung besagt, dass die Switch-Abfrage beendet wird, wenn ein Wert gefunden wurde
- nach einem „case“ können ein- und mehrzeilige Anweisungen folgen
„default“ ersetzt „else“ in der Switch Anweisung
Auch für die Switch Anweisung gibt es eine „else“ Bedingung doch hier heißt sie „default“:
<?php
switch($zahl) {
case 0:
echo 'Zahl 0';
break;
case 1:
echo 'Zahl 1';
break;
default:
echo 'Eine Zahl ungleich 0 oder 1';
}
?>
Default steht am Ende nach allen „case“-Anweisungen und muss auch nicht mit einem break geschlossen werden, da die Switch-Anweisung an dieser Stelle sowieso zuende ist.
Natürlich kann man nicht nur Zahlen sondern auch Strings prüfen:
<?php
switch($name) {
case 'Lisa':
echo 'Lisa ist ein schöner Name';
break;
case 'Laura':
echo 'Hey Laura, ebenfalls ein schöner Name';
break;
default:
echo 'Auch dein Name ist schön, '.$name;
}
?>
Warum die Switch Anweisung verwenden?
Es gibt eigentlich nur 2 Gründe:
- bei vielen „case“-Anweisungen kann switch schneller sein als mehrere „else if“-Anweisungen
- in manchen Fällen ist es übersichtlicher, gerade wenn man viele „case“-Anweisungen hat, bzw eine Variable auf viele unterschiedliche Fälle prüfen möchte (z.b. welche Taste wurde gedrückt: „oben“, „unten“, „links“, „rechts“, „space“, „enter“, etc.)
