Zum Inhalt springen

Websiteentwicklung: PHP: Switch-Abfrage

Aus Wikibooks

Die switch-Funktion

[Bearbeiten]

Die switch()-Anweisung ist im Prinzip eine Erweiterung der if-Anweisung. Der Vorteil hier ist, dass man die Variable gleichzeitig auf mehrere Zustände hin untersuchen kann und diesen Zuständen unterschiedliche Befehle oder auch ganze Funktionen zuordnen kann.

Am besten erklärt sich das an einem Beispiel:

<?php
switch($var)
 {
   case "1": echo "Die Variable ist '1'";
             break;
   case "k": echo "Die Variable ist 'k'";
             break;
   default:  echo "Die Variable ist weder '1' noch 'k'";
 }
?>

Hier wird die Variable $var untersucht. Der Code hinter case "1": wird ausgewertet, wenn die Variable gleich 1 ist. Die Auswertung des Codes endet an der Stelle break;. Die Anweisung break; sollte also immer angegeben werden, sonst werden die anderen Ausgaben "Die Variable ist 'k'" und "Die Variable ist weder '1' noch 'k'" auch ausgegeben. Die Bedingung der switch-Anweisung wird nämlich nur ein mal geprüft. Ist die Bedingung wahr, werden alle folgenden Befehle und Anweisungen ausgeführt. Um dies zu vermeiden, beendet man die switch-Anweisung mit break;.


Durchfall

[Bearbeiten]

HINWEIS: Manchmal ist es auch erwünscht, das break; wegzulassen, so etwas nennt sich Durchfall. Wenn man einen Durchfall benutzen will, so sollte man mit einem Kommentar darauf hinweisen.

Beispiel:

switch($buchstabe) {
   case "a": //Durchfall erwünscht
   case "e":
   case "i":
   case "o":
   case "u":
      echo "Der Buchstabe ist ein Selbstlaut";
      break;
   default:
      echo "Der Buchstabe ist kein Selbstlaut";
}

Trifft keiner der ersten beiden Fälle zu, wird der Code hinter default: ausgeführt. Dieser Eintrag sollte immer an letzter Stelle in der switch-Anweisung stehen. Die Angabe von break; ist hier nicht mehr notwendig, da die switch-Anweisung hier sowieso zu Ende ist.

Alternative Syntax

[Bearbeiten]

Ebenfalls ist wieder eine Alternative Syntax möglich.

switch ($var):
  case 'a':
    //tue etwas
  break;
endswitch;