Du liest:
PHP Switch Case: Alles was du wissen musst

PHP Switch Case: Alles was du wissen musst

von Patrick
03.05.2020
Jetzt PHP programmieren lernen

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.

1. Die PHP Switch Case Anweisungen

1.1 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

1.2 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

1.3  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; ?>

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

3. Weitere Verwendungsmöglichkeiten des PHP Switch Case

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

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

4. 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!



Bislang gibt es keine Kommentare. Markier dein Revier und sei der Erste!

Schreibe einen Kommentar

Das könnte dich auch interessieren