PHP Tutorial #7

Verzweigungen in PHP (if else und switch case)

2018-09-12 | credit: ©spainter_vfx

Um was geht es? 

Verzweigungen machen es möglich, dass der Ablauf eines Programms verschiedene Wege gehen kann. Verzweigungen gehören (neben den Schleifen) zu den Kontrollstrukturen, ohne die komplexere Programme überhaupt nicht möglich wären.

// Schnelles Code-Beispiel

$preis = 500;

if ($preis <= 1000) {
   echo "gekauft!";
}
else{
   echo "zu teuer!!";
}

Einfache if-Anweisung

Die einfache if-Anweisung ist der erste Verzweigungstyp, den wir uns anschauen werden. Sie können sich das Prinzip dahinter mit der WENN-DANN-Logik merken:

  • Wenn (if) ein geprüfter Ausruck wahr ist, dann (und nur dann!) führe einen bestimmten Programmblock aus.

Konkret sieht das so aus:

$akku = 21;

if($akku < 25){  //Prüfe den Ausruck
    echo "ROT (niedrige Akkuladung)";  // wenn wahr: Führe das aus!
}

Wenn der Wert der Variablen $akku kleiner (<) ist als 25 (Prozent), dann führe folgende Anweisung aus: echo "ROT (niedrige Akkuladung)";

Eine if-Anweisung hat demnach folgende Struktur:

  • Schlüsselwort if zu Beginn
  • Einen booleschen Ausdruck in runden Klammern. Das ist der Teil, der geprüft wird. Das Ergebnis dieser Prüfung kann wahr (true) oder falsch (false) sein.
  • Dann folgt der Programmblock, der ausgeführt werden soll, der Ausdruck in den runden Klammern true ergibt. Markiert wird dieser Block von zwei gescheiften Klammern { }

In unserem Beispiel handelt es sich beim Ausdruck $akku < 25 um eine wahre Aussage (true). Deshalb wird dann auch der Programmteil innerhalb der geschweiften Klammern ausgeführt.

Was würde dagegen geschehen, wenn $akku einen Wert von z.B. 30 hätte? Ganz genau: Garnichts!

Vergleichsoperatoren

Wenn wir nicht gerade einen booleschen Variable auf true oder false prüfen, benötigen wir Vergleichsoperatoren. Die Operatoren vergleichen zwei Operanden miteinander und liefern als Ergebnis einen booleschen Wert (true oder false). In einer if-Verzweigung entscheidet dieser Wert, welchen Weg das Programm gehen wird.

Eine Übersicht über die Vergleichsoperatoren erhalten Sie hier

Aktivitätsdiagramm

Stellen Sie sich ein Computerprogramm ruhig als einen Fluss mit Anfang und Ende vor. Wie in jedem Fluss, so gibt es auch in Computerprogrammen unterschiedliche Wege, auf dem der "Programmfluss" fließen kann. Welcher Weg das ist, hängt eben vom Ergebnis der Prüfung ab, die an der Verzweigung durchgeführt wird.

Der Programmfluss unseres Beispiels lässt sich in einem Aktivitätsdiagramm so darstellen:

Infografik PHP if else Verzweigung

if else Anweisung

In unserem Beispiel erhält der Benutzer eine Meldung, wenn der Akkustand geringer als 25 Prozent ist. Wenn das nicht der Fall ist, überspringt das Programm den if-Block einfach. Was aber ist, wenn die Akkuladung 25 Prozent oder mehr beträgt? Warum gibt es dann keine Anzeige?

Richtig ist: Wir haben bereits einen Code-Block für den Fall, dass die if-Prüfung true ist. Jetzt wollen wir auch eine Code-Alternative für den Fall, dass die Prüfung false ist.

Was wir jetzt brauchen ist eine if/else-Kontrollstruktur. Diese läuft nach folgender Logik ab:

  • Wenn (if) ein geprüfter Ausruck true ist, dann führe einen bestimmten Programmblock aus. Ist der Ausdruck aber false, führe stattdessen (else) einen anderen bestimmten Programmblock aus.

Im konkreten Code sieht das so aus:

$akku = 21;

if($akku < 25){  //Prüfe den Ausruck
    echo "ROT (niedrige Akkuladung)";  // wenn wahr: Führe das aus!
}
else{
    echo "GRÜN (Akkuladung in Ordnung)";  // wenn false: Führe stattdessen das aus!
}

Direkt nach dem if-Code-Block setzen wir das Schlüsselwort else, gefolgt von einem Paar geschweifter Klammern { }. Der else-Block wird ausgeführt, wenn die Prüfung des Ausdrucks $akku < 25 false ergibt.

Das angepasste Aktivitätsdiagramm stellt sich wie folgt dar:

Infografik PHP if else Verzweigung

Verschachtelte Verzweigungen

Wir können einzelne if/else-Anweisungen inneinander verschachteln. Das ist in der Praxis oftmals notwendig. Sehen Sie einmal hier:

$akku = 18;
$stromsparmodus = false;

if($akku < 25){ // Erstes if
    echo "ROT (niedrige Akkuladung) ";
    if($stromsparmodus){ // Zweites if
        // Displayhellgkeit reduzieren
        // bestimmte Apps deaktivieren
    }
    else{
        echo "Ihr Akkuverauch ist hoch. Wechseln Sie in den Stromparmodus.";
    }

}
else{
    echo "GRÜN (Akkuladung in Ordnung)";
}

Innerhalb des ersten if-Blocks gibt es noch einmal ein separates (verschachteltes) if/else. Dahin kommen wir aber nur, wenn $akku < 25 ist. Es wird also nun in der zweiten if/else-Kontrollstruktur geprüft, ob die Variable $stromsparmodus auf true gesetzt ist. Ist das der Fall, werden bestimmte Stromsparmaßnahmen eingeleitet (Displayhelligkeit runter, Apps deaktivieren). Andernfalls (else) wird die echo-Anweisung ("Ihr Akkuverbrauch ist hoch...") ausgeführt.

Was glauben Sie wird im Browser angezeigt, wenn wir das Programm mit den Variablenwerten $akku = 18 und $stromsparmodus = false starten? Hier die Lösung:

ROT (niedrige Akkuladung)
Ihr Akkuverauch ist hoch. Wechseln Sie in den Stromparmodus. 

Das nun deutlich komplizierter gewordene Flussdiagramm mahnt Sie bereits daran, es mit der Verschachtelung nicht zu übertreiben:

Infografik PHP if else Verzweigung

Mehrfachverzweigung mit else if

Jaja, schön und gut, Meister! Wir können jetzt mit Verzweigungen in zwei "Richtungen" arbeiten. Was aber, wenn wir mehr als zwei Alternativen benötigen?

Das ist überhaupt kein Problem mit der Merhfachverzweigung. Alles, was wir dazu benötigen, ist das Schlüsselwort-Paar else if. Dieses setzen wir nach dem ersten if-Block ein. Das Beste dabei ist: Wir können es mehrmals hintereinander einbauen:

$akku = 48;

if($akku < 25){
    echo "ROT (niedrige Akkuladung)";
}
else if($akku < 50){
    echo "GELB (mittlere Akkuladung)";
}
else if($akku < 99){
    echo "GRÜN (gute Akkuladung)";
}
else{
    echo "Akku 100% geladen.";
}

Es gibt nun insgesamt vier Möglichkeiten, wie der Code "fließen" kann. Genau wie beim "normalen" if am Anfang, so wird bei jedem else if ein Ausdruck in Klammern geprüft. Ergibt die Prüfung true, wird der dazugehörende Code innerhalb der geschweiften Klammern { } ausgeführt.

Da in unserem Beispiel die Variable $akku den Wert von 48 speichert, ergibt die die Prüfung $akku < 50 true. Somit wird der dritte Codeblock unserer Konstrollstruktur ausgeführt.

Die gesamte Kontrollstruktur wird übrigens sofort beendet, sobald eine der Prüfungen erstmals true ist. Das heißt: Wie in einer "normalen" if/else-Verzweigung gibt es auch in einer else if-Konstruktion immer nur einen Weg, den der Programmfluss gehen kann. Sobald eine Prüfung erstmals true ist, gibt es für die folgenden Codeblöcke keine Chance mehr, da es garnicht mehr zu einer weiteren Prüfung kommt.

Das Aktivitätsdiagramm sieht nun so aus:

Infografik PHP if else Verzweigung

switch case

Mit einigen else if können wir ganz gut arbeiten. Bei einer hohen Anzahl an Verzweigungen wird das aber schnell zu umständlich.

Verwenden Sie bei einer höheren Anzahl an Verzweigungen stattdessen den switch/ case-Kontrollmechanismus.

Damit können wir auf übersichtliche Weise eine Variable auf bestimmte Werte hin prüfen. So gehts:

//Beispieltablets aus dem Jahr 2017

$tablet = "iPad Pro";

switch($tablet){
    case "iPad Pro":
        echo "14 Stunden Akkulaufzeit beim Surfen";
        break;

    case "Amazon Fire HD":
        echo "12 Stunden Akkulaufzeit beim Surfen";
        break;

    case "Lenovo Yoga Book":
        echo "9,5 Stunden Akkulaufzeit beim Surfen";
        break;

    case "Huawei MediaPad":
        echo "9 Stunden Akkulaufzeit beim Surfen";
        break;

    case "Asus ZenPad":
        echo "8 Stunden Akkulaufzeit beim Surfen";
        break;

    default:
        echo "Bitte gültiges Tablet eingeben";
}

Die switch-Anweisung besteht aus dem Schlüsselwort switch und einem Paar runder Klammern, in der die Variable ($tablet) steht, deren Wert wir überprüfen wollen.

Es folgt der Körper, der innerhalb geweifter Klammern { } steht. In diesem Bereich stehen nun alle möglichen Fälle aufgelistet. Je nach Fall (engl. case) wird eine bestimmte Anweisung ausgeführt. In unserem Fall (weil $tablet = "iPad Pro") ist das diese hier: echo "14 Stunden Akkulaufzeit beim Surfen";

Achten Sie auf die Syntax: Nach dem Schlüsselwort case folgt ein Doppelpunkt und dann die Anweisung.

Und was soll das komische break am Ende jedes cases bedeuten? Ganz einfach: Wenn ein case eingetroffen ist, bewirkt das anschließende break, dass die gesamte switch/ case-Kontrollstruktur sofort beendet wird. So sollte es in den meisten Fällen auch sein. Lassen Sie das break aber weg, werden alle folgenden cases zusätzlich ausgeführt, was hier natürlich gar keinen Sinn macht.

Am Ende sehen Sie noch die default-Anweisung. Sie wird nur dann ausgeführt, wenn keiner der cases ein "Treffer" war. Die Anweisung ist praktisch, kann aber auch ganz weggelassen werden kann.

Das allgemeine Diagramm für einen switch case-Kontrollmechanismus sehen Sie hier:

Infografik PHP if else Verzweigung

Werbung

Java lernen

Werde zum Java Profi!

PHP Lernen

Lerne serverbasierte Programmierung

JavaScript lernen

Skille dein Webcoding

FALCONBYTE.NET

Handmade with 🖤️

© 2018-2023 Stefan E. Heller

Impressum | Datenschutz | Changelog

Falconbyte Youtube Falconbyte GitHub facebook programmieren lernen twitter programmieren lernen discord programmieren lernen