Quakenet/#php Tutorial

Hinweis: Wenn sie diese Seite von einer externen URL aufgerufen haben achten sie darauf das alle Kapitel aufeinander aufbauen. Stellen sie daher sicher dass sie alle vorherigen Kapitel gelesen haben, da sie sonst relevante Informationen übersehen.

Switch-Abfragen

  1. Switch-Abfragen

1. Switch-Abfragen

Bei einer switch-Abfrage handelt es sich um eine spezielle Art der Kontrollstruktur. Im Gegensatz zu einer if-Abfrage kann mit einer switch-Abfrage nur ein direkter Vergleich mit einem Wert durchgeführt werden. Wo es mit if möglich ist komplexe Abfragen mit logischen Verknüpfungen zu erzeugen verwendet eine switch-Abfrage intern nur den Vergleichsoperator ==.

Eine Switch-Abfrage wird mit dem Schlüsselwort switch eingeleitet. Danach folgt in runden Klammern den Ausdruck der geprüft werden soll, üblicherweise eine Variable. Danach folgt der Switchrumpf, eingeleitet und beendet durch geschweifte Klammern ({}).

<?php
switch ($var) {
}
?>

Innerhalb des Switchrumpfs fügt man nun case Zeilen ein, an die der PHP-Interpreter springt wenn der Ausdruck den selben Wert hat wie der der hinter dem case steht. Nach dem case Ausdruck folgt dann noch ein Doppelpunkt :.

<?php
switch ($var) {
case 
5:   // springe hier hin wenn 5 == $var gilt
case "b"// springe hier hin wenn "b" == $var gilt
}
?>

Dies hat also etwas von einem goto-Befehl, obwohl es in PHP keine solchen Befehle gibt. Wenn PHP zu einem case-Block hinspringt führt er den PHP-Code an dieser Stelle aus. Wenn er dabei auf weitere case-Zeilen stößt werden diese ignoriert. Dies bedeutet auch das er nicht automatisch beim nächsten case stoppt.

<?php
$var 
4;
switch (
$var) {
case 
0:
    echo 
"Ich werde nicht ausgeführt";
case 
4:
    echo 
"Ich schon";
case 
90:
    echo 
"Ich jedoch auch";
}
?>

Wenn dieses Verhalten nicht erwünscht ist kann man eine break Anweisung hinzufügen. Dies beendet dann den case-Teil und springt somit zum Ende der Switch-Abfrage.

<?php
$var 
4;
switch (
$var) {
case 
0:
    echo 
"Ich werde nicht ausgeführt";
    break;
case 
4:
    echo 
"Ich schon";
    break;
case 
90:
    echo 
"Ich nicht mehr";
    break; 
// theoretisch überflüssig, man ist eh schon am ende
}
?>

Falls eine switch-Abfrage keinen passendes case findet wird der default:-Teil angesprungen, falls vorhanden.

<?php
switch ($formaction) {
case 
'löschen':
    echo 
"Irgendwas wird nun gelöscht";
    break;
case 
'speichern':
    echo 
"Irgendwas wird nun gespeichert";
    break;
default:
    echo 
"Zeige etwas an, oder mache etwas, falls kein case-teil trifft";
    break;
case 
'neuladen'// kann gefunden werden und wird nicht automatisch durch default abgefangen 
    
echo "Etwas wird neu geladen";
    break;
}
?>

Obwohl es möglich ist ein solchen default:-Teil überall einzufügen sollte er jedoch wegen der Übersicht nur am Ende der Switch-Abfrage eingefügt werden. Dies vereinfacht das Lesen des PHP-Skripte. Zuerst prüft man die konkreten Werte und dann gibt es zum Schluss ein default-Teil der als letzte Möglichkeit ausgeführt wird (vergleichbar mit einem else bei Verkettetten if-else if-else if-...-else Abfragen).

Fragen zum Kapitel

Keine Fragen zum Kapitel vorhanden

Zurück zu Weiter zu
Copyright © bei den OPs von #php.de/QuakeNet Valid XHTML 1.0 Strict Valid CSS!