Montag, 25. Juli 2011

SWITCH CASE - das GOTO des zivilisierten Programmierers

Wieder eine kurze Notiz aus der Rubrik Kleinigkeiten.
Eigentlich ist in der Dokumentation, http://php.net/manual/de/control-structures.switch.php, alles über switch case geschrieben, aber wer liest schon Dokumentationen und außerdem ist eine kurze Auffrischung zumindest für Anfänger durchaus hilfreich.

Da GOTO nicht ganz ohne Grund verpönt ist und PHP-Code unverschlüsselt vorliegt, muss sich der Programmierer von heute mit "If" oder "switch case" behelfen.

Die switch-Anweisung erwartet einen Wert und springt dann zu dem passenden Case. Das Break am Ende jedes case Bereiches beendet das Konstrukt. Optional kann ein "default" Bereich eingerichtet werden, falls keiner der Werte passend ist.

Da PHP etwas lax mit Typen umgeht, hilft im Zweifelsfall ein Blick auf die "PHP type comparison tables", http://www.php.net/manual/de/types.comparisons.php. Für Switch ist die Tabelle "Typschwache Vergleiche mittels ==" von Bedeutung.

$MeinErgebnis = 1;

switch ($MeinErgebnis) {
    case "1":
        echo "1";
        break;
    case 2:
        echo "2";
        break;
    default:
        echo "Kein Treffer";
}
//Ausgabe ist 1
Die Break-Anweisungen dürfen bewusst weggelassen werden. In diesem Fall wird auch jeder folgende Case-Bereich durchlaufen bis ein "break" gefunden wird. Sogar der "default" Bereich könnte so mit durchlaufen werden wenn man das "break" im "case 2:" entfernen würde.

switch ($MeinErgebnis) {
    case 1:
        echo "1";
    case "2":
        echo "2";
        break;
    default:
        echo "Kein Treffer";
}
//Ausgabe ist 12
Jedes "case" kann nur eine Bedingung, einen Wert abprüfen. Man darf aber beliebig viele "leere" "case" in den switch-Block stellen und kann damit einem Code-Block quasi verschiedene Bedingungen zuweisen.

switch ($MeinErgebnis) {
    case "1":
    case "2":
        echo "2";
        break;
    default:
        echo "Kein Treffer";
}
//Ausgabe ist 2
Genügend Möglichkeiten um auf ein GOTO verzichten zu können.

Keine Kommentare:

Kommentar veröffentlichen