PHP Schnellstart – Erweiterte Kontrollstrukturen (switch/case, break, default)

Wie du bereits gelernt hast, besitzt PHP einfache Kontrollstrukturen mit den Schlüsselworten if, else und elseif. Diese sind passend, wenn Du nur wenige Vergleiche durchführst. In diesem Abschnitt werfen wir hingegen den Blick auf die erweiterten Kontrollstrukturen mit switch/case, die für den Fall ab mit mindestens drei Vergleichen am besten passen. Das ganze wird auch mit dem Begriff Mehrfachverzweigung bezeichnet -- eine Reihe von if-Anweisungen werden zusammengefasst.

Eine Mehrfachverzweigung mit switch/case zusammenstellen

Ins Spiel kommen jetzt auch neue Schlüsselworte in PHP -- switch, case, break und default. Die Kombination aus switch und einer Variable (deren Wert getestet wird) sowie einer öffnenden, geschweiften Klammer leitet die Mehrfachverzweigung ein.

  • Mit case beschreibst Du jeweils einen zu testenden Fall. case entspricht if bzw. elseif.
  • break benutzt Du, um den zu testenden Fall abzuschließen und an das Ende des switch-Blocks zu springen.
  • default bezeichnet den Standardfall und entspricht dem else aus den einfachen Kontrollstrukturen.

Den switch-Block beendest Du stets mit einer schließenden, geschweiften Klammer ohne Semikolon. Um zu verstehen, die switch funktioniert, erinnere dich kurz an die if-Abfragen. Im Abschnitt zu einfachen Kontrollstrukturen hatten wir diese if-Abfragen aus if, elseif und else besprochen:

<?php
   $guthaben = 125;

   if ($guthaben > 100) {
      echo "Das Guthaben beträgt mehr als 100 Punkte.";
   } elseif ($guthaben < 100) {
      echo "Das Guthaben beträgt mehr als 100 Punkte.";
      break;

      case $guthaben > 0:
         echo "Das Guthaben beträgt weniger als 100 Punkte und ist zu gering.";
         break;
      default:
         echo "Das Guthaben beträgt 0 Punkte.";
   }
?>
Code ausprobieren ×

Erklärung:

  1. Getestet wird die Variable $guthaben. Im Fall 1 wird geprüft, ob deren Wert größer als 100 ist. Falls ja, wird die echo-Anweisung aufgerufen und die Mitteilung ausgegeben.
  2. Die darauffolgende Anweisung break bricht die weitere Auswertung ab. Im Fall 2 wird geprüft, ob das Guthaben größer als 0 ist. Falls ja, wird die echo-Anweisung aufgerufen und die Mitteilung ausgegeben.
  3. Die darauffolgende Anweisung break bricht wiederum die weitere Auswertung ab. Der Fall 3 wird erreicht, wenn zuvor weder Fall 1 oder 2 eingetreten sind. Hier wird nur die echo-Anweisung aufgerufen und die Mitteilung ausgegeben.
  4. Danach folgen keine weiteren Fälle -- es wird die schließende Klammer erreicht und der switch-Block beendet.

Wichtige Hinweise für Mehrfachverzweigungen

Bitte behalte beim Verwenden von Mehrfachverzweigungen die folgenden Hinweise im Kopf:

  • jede Fall-Definition wird mit einem Doppelpunkt abgeschlossen, bevor die Anweisungen folgen.
  • jeder Fall kann beliebig viele Anweisungen haben. Die Ausführung ist nicht auf einen einzigen Wert beschränkt.
  • schließe jeden Fall mit dem Schlüsselwort break gefolgt von einem Semikolon ab. Ohne break wird die Auswertung beim darauffolgenden Fall fortgesetzt. Der switch-Block wird erst verlassen, wenn ein break erreicht wurde oder der letzte Fall abgearbeitet wurde.
  • bitte rücke die Fälle stets gleichmäßig ein. Das erhöht die Lesbarkeit von deinem Programmcode erheblich -- nicht nur für dich, sondern auch für alle anderen, die diesen Programmcode lesen. Einrückung macht auch auf einen Blick deutlich, zu welchem Fall eine Anweisung gehört.

Taschenrechner-Beispiel mit switch/case

Das nachfolgende Beispiel zeigt die Anwendung von switch/case für einen einfachen Taschenrechner bzw. bei der Auswertung von mathematischen Berechnungen. Als Operatoren (Rechenzeichen) werden "+" für die Addition, "-" für die Subtraktion, "*" und "x" für die Multiplikation sowie "/" und ":" für die Division gestattet.

Wie Du siehst, ist bspw. für den Fall "*" keine Anweisung hinterlegt. In diesem Fall werden die Anweisungen aus dem darauffolgenden Fall ausgeführt. Wir machen uns das zu nutze und erreichen damit, dass somit die beiden Operatoren "*" und "x" für die Multiplikation sowie "/" und ":" für die Division abgedeckt sind. Es ist aber nur jeweils einmal beschrieben, was seitens PHP auszuführen ist, was wiederum den Programmcode vereinfacht.

<?php
  $operand1 = 100;
  $operand2 = 132;
  $operator = "/";
  
  switch ($operator) {
      case "+":
        echo $operand1 . " plus " . $operand2 . " ergibt: ", $operand1 + $operand2;
        break;
      case "-":
        echo $operand1 . " minus " . $operand2 . " ergibt: ", $operand1 - $operand2;
        break;
      case "*":
      case "x":
        echo $operand1 . " mal " . $operand2 . " ergibt: ", $operand1 * $operand2;
        break;
      case "/":
      case ":":        
          if ($operand2 != 0) {
            echo $operand1 . " durch " . $operand2 . " ergibt: ", $operand1 / $operand2;
          } else {
            echo "Teilung durch 0 nicht gestattet (Nulldivision).";
          }
          break;
      
      default:
         echo "Der gewählte Operator" . $operator . "wird nicht unterstützt.";  
  }
?> 
Code ausprobieren ×

Erklärung: Im vorliegenden Fall bilden die beiden Werte 100 und 132 sowie "/" als Operand die Berechnung 100 geteilt durch 132 ab. Wird der Fall "/" im switch-Block erreicht, erfolgt sicherheitshalber noch die Überprüfung des Dividenden auf einen Wert ungleich 0, um eine Division durch Null auszuschließen. Danach wird die Berechnung ausgeführt und die passende Mitteilung ausgegeben.

Deine Aufgabe - Jetzt bist du gefragt:

Im untenstehenden Editor findest Du eine einfache Übung zum switch/case-Befehl.

Ich habe eine Variable mit dem Namen $wochentag vorbereitet. Sie speichert den aktuellen Wochentag (Montag, Dienstag etc.) als Zahl. Die Woche beginnt mit der Zahl "0" für den Sonntag (1 = Monat, 2 = Dienstag. usw.). Ich schreibe an dieser Lektion an einem Mittwoch. Daher würde beim Ausführen des Befehls echo $wochentag; die Zahl 3 angezeigt werden. Probiere es selbst aus, wenn du möchtest.

  1. Deine Aufgabe ist es ein switch zu erstellen. Prüfe jeweils die Wochentage Freitag, Samstag und Sonntag und gib jeweils eine kurze Nachricht aus z.B. "Juhu es ist Sonntag" oder "Wochenende! Jaaa".
  2. Dein switch soll außerdem alle anderen Bedingungen (alle anderen Wochentage) abfangen und dann eine Nachricht wie "Arbeit Arbeit :-(" ausgeben.

Code-Editor:

[lp_spoiler title="Lösung anzeigen" class="da"]

Hier ist die Lösung zum switch/case/default:

<?php
   $wochentag = date("w");
   
   switch ($wochentag) {
       case 0:
          echo "Es ist Sonntag. Heute mache ich nichts.";
          break; 
       case 5:
          echo "Wochenende! Jaaa.";
          break;
       case 6: 
          echo "Samstag! Juhu";
          break;
       default:
          echo "Arbeit Arbeit :-(";
   }      
?>
Code ausprobieren ×

[/lp_spoiler]

Zusammenfassung - Erweiterte Kontrollstrukturen

Das waren die wichtigsten Grundlagen zu erweiterten Kontrollstrukturen. Es sei erneut erwähnt, dass das Verständnis von Kontrollstrukturen sehr wichtig ist. Damit sind Programme nicht mehr starr, sondern werden variabel und Du kannst auf verschiedene Ereignisse passend reagieren. Du verfügst jetzt über gute Kenntnisse zu if/else sowie switch/case. Benutze sie um einfache Entscheidungen in deinen Programmabläufen darzustellen.

In der nächsten Lektion lernst du ein weiteres Kontrollwerkzeug kennen, um weniger Code schreiben zu müssen.