PHP Schnellstart – Einfache Kontrollstrukturen mit „Wenn Dann“ (If Else)

Willkommen in der Lektion zu einfachen Kontrollstrukturen. Hier lernst du alles Wichtige, damit deine Programme schlaue Entscheidungen treffen können.

Einfache Programme sind meist linear -- eine Anweisung folgt auf die vorhergehende und alle Anweisungen in einem Programm werden ausgeführt.

Umfangreichere Programme sind komplexer und enthalten sogenannte Kontrollstrukturen. Diese erlauben Entscheidungen darüber, ob eine oder mehrere Anweisung(en) ausgeführt wird, oder nicht.

Grundlage für die Entscheidung sind Bedingungen, die überprüft werden. Die Ausführung der Anweisung(en) erfolgt nur dann, wenn diese Bedingung erfüllt ist -- sprich den Wahrheitswert TRUE ergibt -- und wird ansonsten übersprungen.

PHP beinhaltet:

  • einfache Kontrollstrukturen mit if/else (diese Lektion) und
  • erweiterte Kontrollstrukturen mit switch/case (nächste Lektion).

Möchtest Du nur eine oder wenige Bedingungen prüfen, ist if/else das richtige Konstrukt. Für viele Bedingungen ist hingegen switch/case besser. Wo hier genau die Grenze zu ziehen ist, ist schwer zu sagen, aber ab drei Vergleichskriterien nimmt die Übersichtlichkeit im Programmcode wesentlich ab und switch/case passt dann besser.

Beschäftigen wir uns zunächst mit der einfachen If-Abfrage.

Einfache Verzweigungen mit if  (Wenn / dann)

Dafür kennt PHP das Schlüsselwort if -- auf deutsch übersetzbar mit wenn. Auf if folgt die zu prüfende Bedingung in runden Klammern und danach der Block mit Anweisungen, der ausgeführt wird, wenn die Bedingung zutrifft.

Das nachfolgende Beispiel zeigt die Schreibweise anhand eines Guthabenwertes von Punkten, der überprüft wird. Wenn dieser Wert größer als 100 Punkte ist, dann wird der Anweisungsblock ausgeführt und die Nachricht wird mittels echo() ausgegeben.

<?php
   $guthaben = 125;
   if ($guthaben > 100) { 
     echo "Das Guthaben beträgt mehr als 100 Punkte.";
   }
?>
Code ausprobieren ×

Erklärung: Da unser Guthaben 125 Punkten entspricht, trifft die Bedingung ($guthaben > 100) zu. Die If-Abfrage mit dem echo-Befehl wird also ausgeführt.

Nützlich ist es, auch den Fall abzufangen, wenn das Guthaben nicht die benötigte Anzahl Punkte hat. Die einfachste Variante ist, danach einfach eine zweite Verzweigung hinzuzufügen.

<?php
   $guthaben = 125;

   if ($guthaben > 100) {
      echo "Das Guthaben beträgt mehr als 100 Punkte.";
   }
   if ($guthaben <= 100) {
      echo "Das Guthaben beträgt weniger als 100 Punkte.";
   }
?>
Code ausprobieren ×

Hier wird zuerst die Bedingung $guthaben > 100 geprüft und falls diese erfüllt ist, die Nachricht mit "echo" ausgegeben. Danach wird die nächste Bedingung $guthaben <= 100 überprüft und falls diese erfüllt ist, die Nachricht ausgegeben.

Abfragen mit elseif erweitern

Dieser Programmcode funktioniert tadellos, aber Du kannst ihn vereinfachen, indem Du das Schlüsselwort elseif benutzt. elseif lässt sich mit "prüfe auch" oder "prüfe weiterhin auf" übersetzen. Mit elseif testest Du eine weitere Bedingung. Der Programmcode ändert sich dann wie folgt:

<?php
   $guthaben = 125;

   if ($guthaben > 100) {
      echo "Das Guthaben beträgt mehr als 100 Punkte.";
   } elseif ($guthaben <= 100) {
   echo "Das Guthaben beträgt weniger als 100 Punkte.";
   }
?>
Code ausprobieren ×

Abfragen mit else abfangen (Wenn / dann / ansonsten)

PHP kennt noch ein drittes Schlüsselwort namens else, was sich mit "ansonsten" ins Deutsche übersetzen lässt.

Es fasst alle Fälle zusammen, die mit den vorhergehenden Bedingungen unter if und elseif nicht erfüllt wurden. Damit bietet sich die Möglichkeit, den obigen Programmcode um eine explizite Ausgabe zu erweitern, falls das Guthaben Null Punkte beträgt.

<?php
   $guthaben = 125;

   if ($guthaben > 100) {
      echo "Das Guthaben beträgt mehr als 100 Punkte.";
   } elseif ($guthaben < 1) {
      echo "Das Guthaben beträgt 0 Punkte.";
   } else {
      echo "Das Guthaben beträgt weniger als 100 Punkte und ist zu gering.";
   }
?>
Code ausprobieren ×

Die Bedingungen werden in der Reihenfolge geprüft, in der Du sie aufgeführt hast. Trifft eine Bedingung zu, werden die Anweisungen im dazugehörigen Block ausgeführt. Falls keine der angegebenen Bedingungen zutrifft, wird stets der else-Zweig ausgeführt.

Ich habe die Lektion an dieser Stelle etwas gekürzt. Wenn du weiteres zur If-Abfrage, insbesondere zu geschachtelten Kontrollstrukturen und Hinweisen zu gut lesbarem Code erfahren möchtest, kannst du den weiteren Text mit einem Klick auf folgenden Hinweis anzeigen (und wieder ausblenden).

[lp_spoiler title="Ganze Lektion zu Kontrollstukturen einblenden / ausblenden" class="da"]

Kontrollstrukturen schachteln

Die bisher gezeigten Beispiele beinhalten Kontrollstrukturen in einer einzigen Ebene. PHP erlaubt es Dir auch, mehrere Bedingungen auf einmal zu prüfen und diese Kontrollstrukturen zu verschachteln. Das nächste Beispiel stammt von einem Pizzadienst, bei dem Namen von Pizzen und deren Zutaten geprüft und zusammengestellt werden. Die Zutatenliste ist ein Array, welches je nach gewählter Pizza noch um die entsprechende, benötigte Zutat ergänzt wird.

<?php
$zutatenliste = [];

if ($pizza == "Tonno") {
  $zutatenliste[] = "Thunfisch";
} elif ($pizza == "Franc comtoise") {
  $zutatenliste[] = "Morteauwurst";
  $zutatenliste[] = "Comté-Käse";

  if ($sonderwunsch == "Tomate") {
    $zutatenliste[] = "Tomate";
  }
}
?>

Für eine Pizza "Tonno" enthält die Zutatenliste nur "Thunfisch", für "Franc comtoise" hingegen "Morteauwurst" und "Comté-Käse" und falls als Extra ausgewählt, noch "Tomate".

Ebenfalls kannst Du mehrere Bedingungen in einer if-Abfrage benutzen. Zulässig sind alle logischen Operatoren, um Aussagen passend miteinander zu verknüpfen. Der nachfolgende Programmcode zeigt das für das logische AND:

<?php
$zutatenliste = [];

if ($pizza == "Tonno") {
  $zutatenliste[] = "Thunfisch";
} elif ($pizza == "Franc comtoise") {
  $zutatenliste[] = "Morteauwurst";
  $zutatenliste[] = "Comté-Käse";
}
  if (($pizza == "Franc comtoise") AND ($sonderwunsch == "Tomate")) {
    $zutatenliste[] = "Tomate";
}
?>

Guten Programmcode schreiben

Wie Du vielleicht gesehen hast, hebt sich guter und weniger Programmcode deutlich voneinander ab. Um guten Programmcode zu schreiben, ist Übersichtlichkeit und Lesbarkeit wichtig. Bitte beachte beim Schreiben von Kontrollstrukturen die folgenden Hinweise:

  • füge stets einfache Klammern um Bedingungen hinzu. Mehrere, mittels logischer Operatoren verknüpfte Bedingungen erfordern zusätzliche Klammern.
  • füge stets geschweifte Klammern um den Anweisungsblock hinzu. Bei einer einzelnen Anweisung können diese prinzipiell entfallen, bedeuten aber bei einer späteren Erweiterung zusätzlichen Aufwand.
  • bitte rücke die Anweisungsblöcke stets gleichmäßig ein. Das erhöht die Lesbarkeit von deinem Programmcode erheblich -- nicht nur für dich, sondern auch für alle anderen, die diesen Programmcode lesen. Einrückung macht auch auf einen Blick deutlich, zu welchem Block eine Anweisung gehört.
  • arbeite stets mit einem Standardwert, so dass eine angefragte Variable immer einen definierten Wert hat. Das nachfolgende Beispiel zeigt das anhand der Größe einer ausgewählten Pizza. Wählt der Benutzer keinen Wert aus oder es tritt ein Übermittlungsfehler im Programm auf, bist Du stets auf der sicheren Seite. Ausgangspunkt ist dieser Programmcode:
<?php
if ($pizzagroesse == "M") {
  $boxgroesse = 3;
} elseif ($pizzagroesse == "L") {
  $boxgroesse = 4;
}
?>

Besitzt die Variable $pizzagroesse keinen Wert, ist keine der Bedingungen erfüllt und der Variable $boxgroesse wird auch kein Wert zugewiesen. Damit geht die Auswahl der Zutatenmenge und der Verpackung schief. Besser ist diese Schreibweise mit Hilfe eines Standardwertes:

<?php

// setze Boxgröße 3 für Pizza M
$boxgroesse = 3;

// prüfe auf L als Größenauswahl
if ($pizzagroesse == "L") {
  $boxgroesse = 4;
}

?>

Diese Schreibweise ist nicht nur einfacher lesbar, sondern der PHP-Compiler generiert daraus auch einfachere Anweisungen für den Prozessor. In Folge entsteht Programmcode, der schneller abgearbeitet wird.

[/lp_spoiler]

Deine Aufgabe - Jetzt bist du gefragt:

Im untenstehenden Editor findest Du ein paar einfache Übungen zu If-Abfragen.

Ich habe dir dafür eine Variablen namens $konto1 mit einem Punktestand erstellt.

Aufgabe 1

Die erste Aufgabe besteht darin, eine If-Abfrage zu erstellen, die prüft, ob $konto größer als 5000 ist. Wenn die Bedingung erfüllt ist (TRUE), soll mit dem echo-Befehl die Nachricht "Du hast mehr als 5000 Punkte auf deinem Konto.

Aufgabe 2

Erweitere deine If-Abfrage für alle anderen Fälle (wenn der Kontostand kleiner als 5000 ist). Gib in diesem Fall eine Nachricht aus z.B. "Du hast weniger als 5000 Punkte auf dem Konto". Tipp: Ändere den Wert der Variable $konto (in Zeile 4) z.B. auf 2500, um deine neue Abfrage zu prüfen.

Code-Editor:

[lp_spoiler title="Lösung anzeigen" class="da"]

Hier ist die Lösung für beide Aufgaben:

<?php 
$konto = 2700;
# Füge deine If-Abfrage ab hier ein
if ($konto > 5000) {
        echo "Du hast mehr als 5000 Punkte auf deinem Konto";
} else {
        echo "Du hast weniger als 5000 Punkte auf deinem Konto";
}    
?>
Code ausprobieren ×

[/lp_spoiler]

Zusammenfassung - einfache Kontrollstrukturen mit If/Else

Das waren die wichtigsten Grundlagen zu einfachen Kontrollstrukturen. Hier hast du gelernt, wie du If-Abfragen benutzt, um deinen Code nur beim Eintreffen von festgelegten Bedingungen auszuführen. Das Verständnis von Kontrollstrukturen ist wichtig. Damit sind Programme nicht mehr starr, sondern werden variabel und Du kannst auf verschiedene Ereignisse passend reagieren.

In der nächsten Lektion vertiefen wir dein Wissen um erweiterte Kontrollstrukturen.