PHP Switch Case: Alles was du wissen musst

    Logo der Programmiersprache PHP
    Avatarbild von Patrick
    Patrick

    veröffentlicht am: 03.05.2020
    zuletzt aktualisiert am: 07.02.2023

    PHP switch case: So realisiert du die Verzweigungen!

    Oft müssen wir anhand eines Variablenwertes entscheiden, welcher Code ausgeführt wird. Diesen können wir zwar mit if, elseif und else bestimmen, es gibt jedoch dazu eine weitere Alternative: das PHP Switch Case.
    Wie man diese verwenden kann, will ich dir gerne im folgenden Bericht darlegen.

    Die PHP Switch Case Anweisungen

    switch und case

    Bei der einfachsten Form einer switch Anweisungübergeben wir eine Variable an switch und eine Bedingung an case. Wenn diese Bedingung erfüllt ist, wird der dafür festgelegte Code ausgeführt.

    switch (variable) {
        case bedingung:
            auszuführender code    
    }

    Mit realen Werten sieht das so aus:

    $zahl = 0;
    switch ($zahl) {
        case 0:
            echo "zahl ist 0";
    }
    // zahl ist 0

    default und break

    Würde der Wert von $zahl im vorigen Beispiel einem anderen als 0 entsprechen, würde kein Code ausgeführt werden. Dies ließe sich entweder mit mehr case Blöcken oder einem default Block ändern.
    Mit dem Schlüsselwort default kannst du Code schreiben, der auch ausgeführt wird, wenn kein Fall zutrifft.

    $zahl = 1;
    switch ($zahl) {
        case 0:
            echo "zahl ist 0";
        default:
            echo "zahl ist nicht 0";
    }
    // zahl ist nicht 0

    Wenn $zahl allerdings 0 wäre, wäre das Ergebnis “zahl ist 0zahl ist nicht 0”.
    Das liegt daran, dass in einem solchen Block jeder Quellcode ab der Stelle ausgeführt wird, an der zum ersten Mal eine der Bedingungen eintritt.
    Dieses Verhalten kann mit dem Schlüsselwort break manipuliert werden.
    Mit break kannst du einfach bestimmen, wann die Ausführung der switch case Anweisung beendet werden soll.

    $zahl = 0;
    switch ($zahl) {
        case 0:
            echo "zahl ist 0";
            break;
        default:
            echo "zahl ist nicht 0";
    }
    // zahl ist 0

    alternative Schreibweise

    Du kannst den vorigen Code auch mit einem Doppelpunkt und dem Schlüsselwort endswitch schreiben, statt mit geschweiften Klammern, wie hier:

    $zahl = 0;
    switch ($zahl) {
        case 0:
            echo "zahl ist 0";
            break;
        default:
            echo "zahl ist nicht 0";
    }
    // zahl ist 0

    Mit dieser Syntax könntest du switch case auch in kürzere PHP-Blöcke einbinden und so direkt HTML-Code zwischen diesen schreiben.

    <?php switch ($zahl): ?>
    <?php case 0: ?>
        <p>zahl ist 0</p>
        <?php break; ?>
    <?php default: ?>
        <p>zahl ist nicht 0</p>
        <?php break; ?>
    <?php endswitch; ?>

    Unterschied zu if, elseif, else

    Man kann diese Art Blöcke auch mit den Schlüsselwörtern if, elseif und else schreiben. Hierbei wird ein Ausdruck entsprechend mehrfach ausgewertet, jedes Mal, wenn er überprüft wird.

    $zahl = 0;
    if(++$zahl == 3) {
        echo 3;
    } elseif(++$zahl == 2) {
        echo 2;
    } elseif(++$zahl == 1) {
        echo 1;
    } else {
        echo "Kein Treffer!";
    }
    // 2

    Dadurch, dass $zahl zweimal überprüft wird und vor jeder Überprüfung um 1 erhöht wird, trifft erst der zweite Fall zu. $zahl ist demnach 2 und der dritte Ausdruck wird nicht ausgewertet.

    Im Gegensatz dazu würde im selben Beispiel mit switch case $zahl nur einmal erhöht werden.

    switch(++$zahl) {
        case 3:
            echo 3;
            break;
        case 2:
            echo 2;
            break;
        case 1:
            echo 1;
            break;
        default:
            echo "Kein Treffer!";
            break;
    }
    // 1

    Weitere Verwendungsmöglichkeiten des PHP Switch Case

    Oder

    Es ist zudem möglich, zu überprüfen, ob eine Variable einem von mehreren Werten entspricht. Dazu kannst du aufeinanderfolgenden case Blöcke verwenden.

    $zahl = 0;
    switch($zahl) {
        case 0:
        case 1:
            echo 'zahl ist 0 oder 1';
    }
    // zahl ist 0 oder 1

    Außerdem kann man in einem case-Block auch den Operator für Oder (||) verwenden, um dasselbe Ergebnis zu erzielen.

    $zahl = 0;
    switch (true) {
        case ($zahl == 0 || $zahl == 1):
            echo 'zahl ist 0 oder 1';
            break;
    }
    // zahl ist 0 oder 1

    Da an switch true übergeben wurde, wurde lediglich überprüft, ob der in case angegebene Ausdruck als Ergebnis true zurückliefert.

    Validierung

    So wie im letzten Beispiel gezeigt, sind noch mehr Möglichkeiten der Überprüfung denkbar. Zum Beispiel können Strings auf verschiedene Arten und Weisen überprüft werden:

    $string = '*.~';
    switch(true) {
        case (mb_strlen($string) > 10):
            echo "Der String ist zu lang.";
            break;
        case (!preg_match('/^[a-z0-9]/i', $string)):
            echo "Der String darf nur aus Zahlen und Buchstaben bestehen.";
    	    break;
        default:
            echo true;
    }
    // Der String darf nur aus Zahlen und Buchstaben bestehen.

    Fazit

    Die switch Anweisung lässt sich vielseitig verwenden und ist ein mächtiges Werkzeug. Beachte bitte bei der Verwendung, dass solche Konstrukte schnell kompliziert werden können, vor allem für andere, die deinen Code verstehen müssen.

    Wenn du noch Anmerkungen, Anregungen, Lob oder Kritik hast, informiere mich doch bitte mit einem Kommentar darüber!

    😩 Gelangweilt von den Udemy & YouTube-Tutorials?!

    Lerne spielerisch Python, Java & SQL und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.

    TP Star TP Star TP Star TP Star TP Star

    "Für Leute die gerne Python oder Java lernen wollen ist Codegree klasse. Ist nicht wie bei anderen Konkurrenten auf Videokursen aufgebaut..."

    - Lennart Sparbier

    100% kostenlos registrieren · keine Kreditkarte notwendig

    👋 Wir warten bereits auf dich!

    Lerne das, was du wirklich brauchst.

    Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.

    Logo von Python
    Logo von PyTorch
    Logo von Pandas
    Logo von Matplotlib
    Logo von Java
    Logo von NumPy
    Mehr erfahren

    100% kostenlos registrieren · keine Zahlungsdaten notwendig