Programme mit Bedingungen steuern

Eine kleine Anmerkung bevor es los geht: Manche denken immer noch, dass IF eine Schleife ist. Ich weiß nicht wieso, eventuell weil das Wissen falsch vermittelt wird. Aber IF ist auf keinen Fall eine Schleife, IF ist eine Bedingung
Genauso wie eines der Vorbilder, die Programmiersprache C, beherrscht PHP die if-Bedingung. Diese Form der Bedingung ist sehr effektiv und kurz. Sie setzt sich aus dem Befehl if und einem nachfolgenden, in Klammern stehenden logischen Ausdruck, der Bedingung, zusammen. Danach beginnt ein Block von Anweisungen, der durch geschweifte Klammern begrenzt wird.

<?php
  if ($a == 1) //Bedingung in Klammern
  {
    //Start der Bedingung, öffnen mit Geschweiften Klammern
    //Anweisungsblock
    //Beenden durch geschweifte Klammern
  }
?>

Trifft die Bedingung zu (True), erfolgt der Einstieg in den Anweisungsblock, der dann abgearbeitet wird. Bleibt die Bedingung unerfüllt (False), so wird der Anweisungsblock unbearbeitet ignoriert, bis das durch die geschweifte Klammer } bezeichnete Ende erreicht ist.

Mit dieser einfachen Struktur und Deinen schon erlangten Kenntnissen, lässt sich bereits eine einfache Passwortabfrage programmieren (Als Hilfe siehe dir die Vergleichsoperatoren nochmals an).

<?php
  $input = "Programmieren";
  $password = "Programmieren";
  if($password === $input)
  {
    echo "Du darfst eintreten.";
  }
  if($password !== $input)
  {
    echo "Gandalf sagt: DU...KOMMST...HIER....NICHT...VOOORBEIII!";
  }
?>

Ausgabe:

''Du darfst eintreten.''

In diesem Beispiel besitzen zwei Bedingungen die gleiche Kontrollfunktion. Ihre Zielsetzung ist aber verschieden. Die erste if-Bedingung prüft, ob der Wert der Variablen $input übereinstimmt und vom gleichen Datentyp ist. Die zweite if-Bedingung prüft, ob die beiden Variablen verschieden sind. Der Anweisungsblock der ersten if-Bedingung wird ausgeführt, der der zweiten nicht.
Diese zwei Strukturen lass sich durch else1) zu einer Struktur zusammenlegen.

<?php
  $input = "trollen";
  $password = "Programmieren";
  if($password === $input)
  {
    echo "Du darfst eintreten.";
  } else
  {
    echo "Gandalf sagt: DU...KOMMST...HIER....NICHT...VOOORBEIII!";
  }
?>

Ausgabe:

''Gandalf sagt: DU...KOMMST...HIER....NICHT...VOOORBEIII!''

Auf den Befehl else folgt keine Bedingung, sondern gleich der Anweisungsblock. Der Anweisungsblock nach else wird ausgeführt, wenn keine vorhergehende Bedingung durch if oder elseif erfüllt wurde. Dieser Anweisungsblock ist gleichzeitig der Abschluss der Struktur.
Sind mehr Bedingungen in einer Struktur zu vereinen, muss elseif genutzt werden. Dieser Befehl steht immer im Zusammenhang mit einer vorhergehenden Bedingung.

<?php
  $input = "";
  $password = "PHP";
  if ($password === $input)
  {
    echo "Du darfst eintreten!";
  }
  elseif(!$input)
  {
    echo "Bitte gib dein Passwort ein.";
  }
  else {
    echo "Du musst leider draußen bleiben, da dein Passwort nicht korrekt ist.";
  }
?>

Das ! Zeichen bedeutet, dass geprüft wird, ob die Variable leer ist (False) oder nicht (True). So kann man sich einiges an Tipperei sparen ;-)
Ausgabe:

''Bitte gib dein Passwort ein''

Die elseif Anweisung kann beliebig oft hintereinander benutzt werden, muss aber immer vor der else Anweisung stehen. Bei der Deklaration wird immer diese Struktur beibehalten:

<?php
  if($Bedingung1)
  {//Anweisungen
  }
  elseif(Bedingung2)
  {//Anweisungen
  }
  else{
    //Anweisungen
  }
?>

Wenn in dem Fall, dass keine Bedingung zutrifft, nichts ausgeführt werden soll, kann else entfallen.

Alternative Schreibweise

Anstelle der geschweiften Klammern wird der Anweisungsblock im folgenden Beispiel durch einen Doppelpunkt eingeleitet. Die letzte Klammer entfällt. Das Ende eines Blocks wird durch eine neue Bedingung angegeben. Der Befehl endif beendet die gesamte Struktur.

<?php
  $input = "";
  $password = "PHP";
  if($password === $input) : echo "Du darfst eintreten";
  elseif(!$input) : echo "Du musst ein Passwort angeben!";
 
?>
<br /> Die Ausführung des Skripts lässt sich sehr bequem an jeder Stelle im Quelltext kurzzeitig pausieren. <br />
<?php
  else : echo "Du musst draußen bleiben, da dein  Passwort nicht korrekt ist.";
  endif;
?>

Ausgabe:

Du musst ein Passwort eingeben.
Die Ausführung des Skripts lässt sich sehr bequem an jeder Stelle im Quelltext kurzzeitig pausieren.

Kurzschreibweise

Besteht Deine Struktur aus

  • einer Bedingung,
  • einer Anweisung für den Fall, dass die Bedingung zutrifft und
  • einer Anweisung für das Gegenteil.

So lässt sich auch die folgende Kurzschreibweise nutzen:

<?php
  $Variable1 = 8;
  $Variable1 >= 9 ? $Variable1 = "Variable1 ist größer als 9." : print("Variable1 ist kleiner als 9.<br />Variable1 ist ");
  echo $Variable1;
?>

Ausgabe:

Variable1 ist kleiner als 9.
Variable1 ist 8

Die Struktur sieht im Allgemeinen immer so aus: Überprüfende Bedingung ? Der Wenn True Fall : Der wenn False Fall. Dabei ist es wichtig, dass jeder dieser Fälle nur einen Funktionsaufruf beinhaltet. Natürlich ist es auch möglich, mehrere Funktionen ineinander zu verschachteln. In diesem Fall sollte aber die Variante mit den Klammern bevorzugt werden, um den Überblick nicht zu verlieren.

Entscheidungen mit ''switch''

Muss eine Variable mehrfach getestet werden, so wie im Passwort-Beispiel, so gibt es auch hier in PHP eine elegantere Lösung als if-else Anweisungen. Durch die Verwendung der Struktur switch ergibt sich folgende Syntax:

<?php
  $input = "PHP";
  switch($input)
  {
    case "PHP" : echo "Du darfst eintreten";              break;
    case ""    : echo "Bitte gib ein Passwort ein.";      break;
    default    : echo "Dein Passwort war nicht korrekt.";
  }
?>

Ausgabe:

Du darfst eintreten

In der Klammer nach dem switch-Befehl wird die zu untersuchende Variable übergeben. Jetzt werden nacheinander die gewünschten Fälle mit case-Anweisungen abgearbeitet. Nach dem Doppelpunkt beginnt der Anweisungsblock, welcher durch ein neues case oder die geschweifte Klammer beendet wird. Ein Anweisungsblock, der unabhängig von einer Bedingung ist, wird einmalig mit default angegeben und sollte am Ende stehen.

Aus dieser Struktur kann vorzeitig mit dem Befehl break ausgetreten werden. Wird der Austritt weggelassen, werden zwar alle folgenden case-Werte ignoriert, deren Anweisungsblöcke aber nicht. So eröffnen sich komplett neue Möglichkeiten:

<?php
  $bewertung = 4;
  $text = "Dieses Restaurant wurde mit ";
  switch($bewertung)
  {
    case 5: $text .= "*";
    case 4: $text .= "*";
    case 3: $text .= "*";
    case 2: $text .= "*";
    case 1: $text .= "*";
            $text .= " Sternen bewertet.";
    echo $text;
    break;
    default: echo "Es wurde noch keine Bewertung abgegeben.";
  }
?>

Ausgabe:

Dieses Restaurant wurde mit **** Sternen bewertet.

Kann ein Anweisungsblock auf mehrere Fälle angewendet werden, so dürfen auch mehrere case-Befehle vor diesem Block stehen.

<?php
  $bewertung = 4;
  $text = "Dieses Restaurant wurde mit ";
  switch($bewertung)
  {
    case 2: case 1: case 3: echo "Dieses Restaurant ist in der unteren Preisklasse."; break;
    case 5: case 4:         echo "Das Restaurant ist in der oberen Preisklasse.";     break;
    default:                echo "Es wurde noch keine Bewertung abgegeben.";
  }  
?>

Ausgabe:

Das Restaurant ist in der oberen Preisklasse.

Beachte bei dieser Schreibweise, dass nach jeder case-Anweisung ein Doppelpunkt steht.

Formatierung der ''switch'' Anweisung

Wie man in den Beispielen sieht, wurde die Abfrage als Tabelle aufgebaut, um eine übersichtliche Darstellung zu bieten. Da PHP, wie viele andere Programmiersprachen auch, Leerzeichen ignoriert, kann man seinen Quelltext in solchen Fällen übersichtlicher gestalten, wenn man ihn tabellarisch aufbaut. Je nachdem ist es bei großen und komplizierten (langen) Abfragen nicht mehr sinnvoll möglich, die Anweisungen schön zu gestalten, doch man sollte immer Wert darauf legen, die Darstellung so zu wählen, dass man die Funktion schnell überschauen kann.

Im nächsten Kapitel geht es nun um Schleifen (Wiederholungen).

1) »sonst«