Anzeige
Tutorialbeschreibung

Switch Case

Switch Case

Die Switch-Anweisung ist vom Prinzip her wie eine Reihe aufeinanderfolgender if-Anweisungen.

Eine Switch-Abfrage wird eingeleitet mit dem Schlüsselwort „switch“. Danach folgt in runden Klammern der zu prüfende Ausdruck „($variable)“. Dieser ist üblicherweise eine Variable.
Danach folgt der Switchrumpf, eingeleitet und beendet durch geschweifte Klammern „{}“.

<?php
switch ($variable){
}
?>
Innerhalb des Switchrumpfs werden nun die zum Vergleich zu prüfenden „Fälle“ zeilenweise aufgeführt. Dies wird mit dem „case“-Ausdruck gemacht. Hinter jeder „case“-Anweisung steht der zu prüfende Ausdruck, gefolgt von einem Doppelpunkt „:“.
<?php
switch ($variable){
    case 4711: //springe hierhin, wenn 4711 == $variable gilt
    case "abc": //springe hierhin, wenn "abc" == $variable gilt
}
?>

Der Code, der auf die „case“-Anweisung folgt, wird bei Übereinstimmung der „$variable“ und des Ausdrucks hinter der „case“-Anweisung ausgeführt.
Die „case“-Anweisungen bis zum Block, der ausgeführt wird, werden ignoriert.
Die „case“-Anweisungen, die auf den Block, der ausgeführt wird, folgen, werden ausgeführt, obschon der Vergleich der „$variable“ und des Ausdrucks hinter der „case“-Anweisung keine Übereinstimmung erbringt. Dies kann zu unerwünschtem Verhalten führen.
Folgendes Beispiel verdeutlicht dieses Verhalten:

<?php
$variable = 4711;
switch ($variable) {
case 10:
    echo "Dieser Code wird nicht ausgeführt";
 case 4711:
    echo "Dieser Code wird ausgeführt";
 case "abc":
    echo "Dieser Code wird ebenso ausgeführt";
}
?>

Um dieses Verhalten zu umgehen, kann am Ende des Blockes die Anweisung „break;“ geschrieben werden. Diese bewirkt, dass PHP bis zum Ende des Switchrumpfs springt.
Folgendes Beispiel verdeutlicht dieses Verhalten:

<?php
$variable = 4711;
switch ($variable) {
case 10:
    echo "Dieser Code wird nicht ausgeführt";
    break;

case 4711:
    echo "Dieser Code wird ausgeführt";
    break;

case "abc":
    echo "Dieser Code wird nicht ausgeführt";
    break;
}
?>



Anmerkung: die letzte Anweisung ist eigentlich überflüssig, da man bereits am Ende des Switchrumpfes ist. Ich empfehle jedoch, diese Anweisung trotzdem der Vollständigkeit halber zu schreiben (sauberer Code).

Zum Schluss möchte ich noch die Möglichkeit aufzeigen, wie eine Standard-Anweisung definiert werden kann, wenn keine Übereinstimmung gefunden wurde. Dies wird mit der Anweisung „default:“ gemacht.
Folgendes Beispiel verdeutlicht dieses Verhalten:

<?php
$variable = 2000;
switch ($variable) {
    case 10:
        echo "Dieser Code wird nicht ausgeführt";
    break;
    case 4711:
        echo "Dieser Code wird nicht ausgeführt";
    break;
    case "abc":
        echo "Dieser Code wird nicht ausgeführt";
    break;
    default:
        echo "Dieser Code wird ausgeführt, wenn keine Übereinstimmung gefunden wurde";
    break;
}
?>

Ich möchte an dieser Stelle darauf hinweisen, dass die „default“-Anweisung theoretisch überall innerhalb des Switchrumpfes defniert werden kann. Ich empfehle jedoch, diese immer an den Schluss zu schreiben. Dies erleichtert das Lesen des Codes.

Nun noch ein Beispiel zur Verdeutlichung (als Download beigefügt):

<?php

/*
Anhand eines durch den Benutzer eingegebenen Landes wird die entsprechende Sprache eruiert.
Folgende URL-Eingabe würde zum Ergebnis "Sie sprechen italienisch" führen (Dateiname switch.php)
http://[URL]/switch.php?land=Italien
*/

if(isset($_GET['land']) && $_GET['land'] != ""){
    $land = $_GET['land']; //Eingabe durch Benutzer mit der Methode GET
}else{
    $land = "nicht definiert";
}

switch ($land) {
    case "Deutschland":
    echo "Sie sprechen deutsch.";
    break;
    case "Italien":
    echo "Sie sprechen italienisch";
    break;
    case "Spanien":
    echo "Sie sprechen spanisch";
    break;
    default:
    echo "Die Sprache des von Ihnen angegebenen Landes konnte nicht definiert werden.";
    break;

}
?>

Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von NoNamExTc
  • 16.02.2010 - 23:41

Gut erklärt, und recht simpel gehalten. Mir ist aufgefallen das es eigentlich wie bei Java ist ;) Das lernen wir gerade in der Schule^^

Portrait von Schulli
  • 12.02.2010 - 12:56

Gut und einfach beschrieben! Danke.

Portrait von mfgleo
  • 12.02.2010 - 06:42

Als Anfänger wirklich nicht schlecht. Würde mir wünschen, wenn es beim nächsten mal etwas ausführlicher ist.

Anmerkung: Es darf nicht heißen
"case 4711: //springe hierhin, wenn 4711 == $variable gilt", denn es ist genau anders herum "prüfe ob die $variable == 4711".

Portrait von pedro2206
  • 11.02.2010 - 15:55

vielen Dank !!!****

Portrait von romox
  • 11.02.2010 - 09:57

if(isset($_GET['land']) && $_GET['land'] != "") kann man mit

if(!empty($_GET['land'])) ersetzen, imho

aber auch das braucht man eigentlich nicht. wenn das land nicht definiert wurde oder der wert nicht in switch gefunden wird, wird man durch default gejagt. das sind so die logischen überlegungen. aber ansonsten gut für anfänger ;)

x
×
×