quakenet:#php Tutorial

Author: Progman, zuletzt bearbeitet von progman @ 2004/02/23 15:49:55

Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.

Switch-Abfrage

  1. Die switch-Abfrage
  2. break-Befehl
  3. default:

1. Die switch-Abfrage

Die switch-Abfrage ist eine Kontrollstruktur wie die If-Abfrage. Sie führt nur bestimmte Programmteile aus, wenn bestimmte Bedingungen erfüllt sind. Doch eine switch-Abfrage macht nur beim Vergleichen von Ausdrücken und Variablen Sinn. Wenn der Ausdruck oder die Variable den Wert xy hat, dann wird der Teil abc ausgeführt, wenn der Wert ghj ist, wird ein anderen Teil ausgeführt. Mit If-Abfragen würde das so aussehen.

<?php
    $name
= 3;
    if (
0 == $name) {
        echo
"Der Wert der Variable ist 0";
    }
    if (
1 == $name) {
        echo
"Der Wert der Variable ist 1";
    }
    if (
"hi" == $name) {
        echo
"Der Wert der Variable ist hi";
    }
    if (
3 == $name) {
        echo
"Der Wert der Variable ist 3";
    }
    
// ....
?>

Das hier fast immer die gleiche Anweisung ausgeführt wird ist reiner Zufall. Das Beispiel könnte auch so aussehen.

<?php
    $action
= "löschen"; // aus einem Formular

    
if ("löschen" == $action) {
        
daten_aus_Datenbank_loeschen();
        echo
"Die Daten wurden gelöscht";
    }
    if (
"bearbeiten" == $action) {
        
daten_speichern();
        echo
"Die Daten wurden gespeichert";
    }
    if (
"hinzufügen" == $action) {
        
neue_daten_hinzufuegen();
        echo
"Die Daten wurden hinzugefügt";
    }
?>

Dieses Beispiel kann man z.B. nutzen um die Member für seinen Clan hinzuzufügen, bearbeiten oder zu löschen. Die Funktionen daten_aus_Datenbank_loeschen() gibt es natürlich nicht. An dieser Stelle kommen dann die entsprechenden Funktionen um dann wirklich die Daten zu löschen.

Eine Switch-Abfrage ist etwas anders aufgebaut als mehrere If-Abfragen, hat aber auch Vorteile gegenüber If-Abfragen. Eine Switch-Abfrage ist wie folgt aufgebaut.

<?php
    
switch (variable) {
        ...
    }
?>

Da wo in diesem Beispiel variable steht, kommt dann die Variable rein die man überprüfen möchte. In den geschweiften Klammern kommen dann die case wert: Zeilen. Der PHP-Interpreter durchläuft dann jedes case und springt dann dort hin wo der Inhalt der Variable gleich dem Wert hinter case ist und arbeitet dann dort stehende Codes ab.

<?php
    $name
= 5;              //
                            //
    
switch ($name) {        // Hier sieht man das die Variable $name überprüft werden soll
    
case 0:                 //   Nein  X
        // PHP-Code         //         |
    
case "bla":             //   Nein  |
        // PHP-Code         //         |
    
case "blo":             //   Nein  |
        // PHP-Code         //         |
    
case -6:                //   Nein  |
        // PHP-Code         //         |
    
case 5:                 //   Ja    `-->>--.  Hier ist eine Übereinstimmung
        // PHP-Code         //                x    }
    
case 1337:              //   Nein         x    } \
        // PHP-Code         //                x    }  \
    
case 6.2435:            //   Nein         x    } --  wird ausgeführt
        // PHP-Code         //                x    }  /
    
case "er fg ":          //   Nein         x    } /
        // PHP-Code         //                x    }
    
}                       //         ,--<<--'  ende von switch
                            //         |
    
echo "Weiter gehts";    //         x
    // PHP-Code             //         x
?>

Hier wird die Variable $name auf ihren Wert überprüft. PHP guckt sich dabei jedes case an, ob der Wert, der hinter case steht (kann ein beliebiger Ausdruck sein, egal ob int, float oder string), mit dem Wert in der Variable. Sobald PHP eine Übereinstimmung gefunden hat, arbeitet PHP all die Befehle ab, die zwischen diesem case (hier case 5:) und der geschweiften Klammer zu } von der switch-Abfrage stehen. Wenn also der Wert der Variable bei dieser switch-Abfrage den Wert 6.2435 hat, dann werden nur die letzen beiden Code-Segmente ausgeführt. Wenn die Variable den Wert 0 hat, dann werden alle PHP-Segmente ausgeführt. Und wenn die Variable einen Wert hat der nicht hinter einem case steht, also z.B. 3.1415, dann wird gar kein PHP-Code ausgeführt, denn es wurde ja auch keine Übereinstimmung gefunden. Wenn er eine Übereinstimmung gefunden hat, beachtet er dann kommende cases nicht mehr.

2. break-Befehl

Es kommt aber viel häufiger vor, dass man mit einer switch-Abfrage nur den case-Teil ausführen will, der direkt darunter steht. Die anderen Programmteile mit den cases möchte man in Ruhe lassen. Also müssen wir PHP sagen, dass er nach der Abarbeitung der PHP-Befehle die anderen cases überspringen soll. Überspringen können wir nicht, aber wir können die switch-Anweisung vorzeitig beenden. Dies geht mit dem break; Befehl.

<?php
    $name
= 5;              //
                            //
    
switch ($name) {        // Hier sieht man das die Variable $name überprüft werden soll
    
case 0:                 //   Nein  X
        // PHP-Code         //         |
        
break 1;            //         |
                            //         |
    
case "bla":             //   Nein  |
        // PHP-Code         //         |
        
break 1;            //         |
                            //         |
    
case "blo":             //   Nein  |
        // PHP-Code         //         |
        
break 1;            //         |
                            //         |
    
case -6:                //   Nein  |
        // PHP-Code         //         |
        
break 1;            //         |
                            //         |
    
case 5:                 //   Ja    `-->>--.  Hier ist eine Übereinstimmung
        // PHP-Code         //                x
        // PHP-Code         //                x
        // PHP-Code         //                x
        // PHP-Code         //                x
        
break 1;            //                x-->-,    break-Befehl
                            //                      \
    
case 1337:              //   Nein                \
        // PHP-Code         //                       |
        
break 1;            //                       |
                            //                       |
    
case 6.2435:            //   Nein                |
        // PHP-Code         //                       |
        
break 1;            //                       |
                            //                       |
    
case "er fg ":          //   Nein                /
        // PHP-Code         //                      /
        
break 1;            //                     /
    
}                       //         ,-<<<----*'`
                            //         |
    
echo "Weiter gehts";    //         x
    // PHP-Code             //         x
?>

PHP prüft hier den Inhalt der Variable $name. Bei case 5: findet er eine Übereinstimmung und führt da die Befehle aus. Bei dem break; beendet er dann vorzeitig die switch-Abfrage und arbeitet dann im Code weiter. Dies geht auch mit Schleifen (Das Thema Schleifen wird später durchgenommen). Eine If-Abfrage kann man auf diese Weise nicht vorzeitig beenden, da If kein switch und kein Schleifenkonstruktor ist. Zur besseren Übersicht sollte man immer ein case-break Block mit einer Leerzeile trennen, wie im Beispielcode zu sehen.

3. default:

Mit einer switch-Abfrage können wir Variablen auf ihren Inhalt prüfen. Doch vielleicht möchte man auch dann ein Code ausführen wenn keine Übereinstimmung gefunden ist, also sowas wie ein else-Teil. In einer switch-Abfrage heißt das nicht else, sondern default:.

<?php
    $name
= 5;
    switch (
$name) {
    case
0:
        echo
"Die Zahl ist die 0";
        break;
        
    case
1:
        echo
"Uii, die 1";
        break;

    case
2:
        echo
"Die 2, wie cool";
        break;

    default:
        echo
"Die Variable ist weder 0, noch 1 oder 2";
        break;
    }
?>

Hier wurde auch wieder das break; benutzt. Das letzte break; kann man sich eigentlich sparen, denn man ist ja schon am Ende der switch-Abfrage, doch mit dem break; sieht der default-Teil 'vollständiger' aus.

In dieser switch-Abfrage wird der default-Teil ausgeführt, denn bei diesem Code wurde keine Übereinstimmung gefunden.

Fragen zum aktuellen Thema

  1. Was macht Switch und was macht If?
  2. Was macht break;?
Was macht Switch und was macht If?

Die Funktionsweisen von switch und if sind sehr unterschiedlich.

  • switch - Eine switch-Abfrage prüft den Inhalt einer Variable und führt bei Übereinstimmung an einer case-Stelle den nachfolgenden Code aus.

  • if - Eine if-Abfrage führt einen Programmcode aus, wenn die Bedingung in der If-Abfrage true ergibt. Diese Bedingung kann sehr komplex sein und aus logischen Verknüpfungen bestehen.

Was macht break;?

Die Anweisung break beendet bzw. verlässt eine switch-Abfrage oder eine Schleife. Mit einer break; Anweisung kann keine If-Abfrage abgebrochen werden, da If kein Schleifenkonstruktor ist.

Nach oben