Derzeit online: ca. 78 User  
Spenden via PayPal PHP für dich ist auch als Buch erhältlich - im handlichen Format, zum Nachschlagen, Mitnehmen oder gemütlichen nebenbei Lesen. Mit noch mehr Informationen, zusätzlichen Beispielen und Übungsaufgaben.
Jetzt in der aktualisierten Version bei Amazon oder BoD bestellen!


PHP

Hierhin switchen, dahin switchen...

... und alles wird viel einfacher.

Wenn wir so wie in unserem vorigen Beispiel je nach User (also Inhalt der Variable) einen anderen Text ausgeben wollen, wird es umständlicher, umso mehr verschiedene Fälle wir abdecken wollen. Wir bräuchten ja für jeden Fall eine eigene if- bzw. elseif-Anweisung. Um das zu vereinfachten gibt es die Funktion switch.

Das sieht erstmal so aus:
<?php
switch($user)
{
  case ("Claudia"):
  echo "Bist du Cloud?";
  break;
}
?>
In der Klammer hinter dem switch steht die Variable, die wir überprüfen wollen - in unserem Fall also der angegebene Username ($user). Innerhalb der geschweiten Klammern geben wir jetzt den Fall (case) an, den wir behandeln wollen. Dafür schreiben wir case ("gewünschter Inhalt"):. Achte bitte darauf, dass am Ende ein Doppelpunkt kommt.

Das, was wir bei case angeben, wird überprüft ob es mit der oben angegebenen Variable entspricht. Wenn wir also schreiben case ("Claudia"): wird genauso wie bei einer if-Abfrage überprüft, ob $user == "Claudia" zutrifft.

Danach können wir angeben, was im Falle einer Übereinstimmung (also wenn der Username tatsächlich Claudia ist) tun wollen. Bei uns ist das die Ausgabe des Textes "Bist du Cloud?" mit Hilfe des echo-Befehls. Der wiederum muss mit dem üblichen Semikolon abgeschlossen werden.

Ganz wichtig hierbei ist es, dass wir danach noch break; verwenden. Damit wird die switch-Funktion an dieser Stelle abgebrochen und nichts weiter getan.

Das alleine ist jetzt eher langweilig und wir könnten es genauso gut mit einer if-Anweisung hinbekommen. Interessant wird switch jetzt aber, wenn wir mehrere Fälle überprüfen wollen. Wir erweitern das ganze also noch um die schon bekannte Überprüfung, ob der Username vielleicht nicht Claudia, sondern Andreas lautet:
<?php
switch($user)
{
  case ("Claudia"):
  echo "Bist du Cloud?";
  break;
 
  case ("Andreas"):
  echo "Bist du Unki?";
  break;
}
?>
Wie du sehen kannst, geben wir den zweiten Fall, den wir überprüfen wollen einfach darunter an, genauso wie den ersten. Sollte die Variable $user also nicht "Claudia" beinhalten, gibt die Funktion auch nicht "Bist du Cloud?" aus, sondern testet auf den nächsten festgelegten Fall, bei uns also "Andreas". Falls dieses Mal der richtige Wert in der Variable ist, führt sie den dazu gehörenden Befehl - bei uns also wiederum die Ausgabe eines Textes mittels echo - aus und endet dann. Das entspricht in unserem vorigen Beispiel mit der if-Anweisung dem elseif-Teil.

Was passiert jetzt aber, wenn wir zwei Fälle angegeben haben und keiner zutrifft?

Dafür gibt es die Angabe default:
<?php
switch($user)
{
  case ("Claudia"):
  echo "Bist du Cloud?";
  break;
 
  case ("Andreas"):
  echo "Bist du Unki?";
  break;
 
  default:
  echo "Also du bist sicher weder Cloud noch Unki!";
  break;
}
?>
Wenn die Variable $user irgendetwas beinhaltet, dass wir nicht definitiv mittels case festgelegt haben, macht die Funktion das, was unter default: steht. Bei uns gibt sie dann also den Text "Also bist du sicher weder Cloud noch Unki!" aus. Auch hier setze bitte am Ende ein break;.

Bei unserem Beispiel sieht das jetzt eher nutzlos aus. Die zwei Fälle ließen sich auch problemlos über die if- bzw. elseif-Anweisung überprüfen. Ganz anders aber, wenn wir viel mehr Möglichkeiten abdecken wollen. Für jeden Fall eine elseif-Anweisung zu schreiben ist sehr umständlich, mittels switch bzw. case geht das wesentlich schneller. Außerdem bietet die Funktion eine sehr schöne Lösung für den Fall, dass bei mehreren unterschiedlichen Inhalten der Variable das gleiche getan werden soll.

Was ich damit meine? Stell dir einfach vor, Andreas würde nicht immer "Andreas" als Name angeben, sondern auch mal "Andi" oder "Andy". Indem wir unsere "cases" erweitern, können wir das ganz einfach mit überprüfen:
<?php
switch($user)
{
  case ("Claudia"):
  echo "Bist du Cloud?";
  break;
 
  case ("Andreas"):
  case ("Andi"):
  case ("Andy"):
  echo "Bist du Unki?";
  break;
 
  default:
  echo "Also du bist sicher weder Cloud noch Unki!";
  break;
}
?>
Jetzt folgt nach dem ersten case ("Andreas"): also nicht die Anweisung, was in dem Fall getan werden soll, sondern ein weiterer möglicher Fall, der überprüft werden soll und für den das gleiche getan werden soll, wie wenn "Andreas" richtig gewesen wäre. All diese möglichen Fälle stehen untereinander, nach dem letzten kommt dann das, was getan werden soll, wieder beendet durch ein break;. Wenn jetzt also die Variable $user "Andreas", "Andi" oder "Andy" beinhaltet wird immer der Text "Bist du Unki?" ausgegeben.

Man kann natürlich nicht nur den echo-Befehl verwenden. Auch die Zuweisung von Variablen wäre möglich. Wenn du mehrere Sachen machen möchtest, schreibst du sie einfach untereinander und macht am Ende break; Also z. B..:
<?php
switch($user)
{
  case ("Claudia"):
  case ("Claudi"):
  echo "Bist du Cloud?";
  echo "<br />";
  echo "Sch&ouml;n, dich zu sehen.";
  $freude = "gro&szlig;";
  break;
 
  default:
  echo "Schade, wieder keine Cloud!";
  break;
}
?>
Damit würde also nicht nur "Bist du Cloud?" ausgegeben werden, sondern auch noch "Schön, dich zu sehen." (getrennt durch einen Zeilenumbruch, deswegen das <br>). Zusätzlich wird eine Variable $freude festgelegt, die mit dem Wert "groß" gefüllt wird. Diese könnten wir z. B. später weiter verwenden.

Man kann sogar if-Anweisungen ausführen:
<?php
switch($user)
{
  case ("Claudia"):
  case ("Claudi"):
  echo "Bist du Cloud?";
  echo "<br />";
  if($user == "Claudi")
  {
    echo " Du sollst deinen Namen doch nicht abk&uuml;rzen!";
  }
  break;
 
  default:
  echo "Schade, wieder keine Cloud!";
  break;
}
?>
Jetzt wird, wenn der Username "Claudia" oder "Claudi" ist "Bist du Cloud?" ausgegeben. Danach wird noch extra überprüft, ob der Username "Claudi" war und nur in diesem Fall kommt noch die zusätzlich Ermahnung "Du sollst deinen Namen doch nicht abkürzen!".

Die Möglichkeiten, die switch bietet sind also sehr vielfältig und auch sehr praktisch. Leider funktioniert es aber nur, wenn man überprüfen möchte, ob die Variable einen exakten Wert (oder einen exakten anderen) beinhaltet. Man kann weder mit größer oder kleiner arbeiten, noch überprüfen, ob zwei Variablen zugleich einen bestimmten Wert haben. Dafür brauchen wir wieder if-Anweisungen und wie das funktioniert erkäre ich als nächstes.

Autor: Claudia Unkelbach

=> Weiter
© 2001 - 2017 Claudia Unkelbach
Gießener Straße 75, 35396 Gießen