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