Verzweigungen in PHP: IF, ELSE und binäre Logik
In diesem PHP Tutorial lernen wir Verzweigungen in PHP mit IF, ELSE und ELSE IF sowie die binäre Logik dahinter kennen.Tags: Binäre Logik | else | if | logische Operatoren | PHP lernen | Programmieren lernen | Variablen | Verzweigungen | Web-Development lernen | Webseiten erstellen lernenWorum geht´s?
In diesem PHP Tutorial werden wir uns ansehen, wie wir Verzweigungen in PHP einsetzen können, um unser PHP Skript nützlicher zu machen. Wir lernen die Grundlagen von IF und ELSE in PHP und welche Arten von einfachen Bedingungen es gibt. Außerdem werden wir uns mit binärer Logik und logischen Operatoren beschäftigen.
1. Was sind Verzweigungen in PHP?
Eine Verzweigung in PHP ermöglicht es dir, das PHP Skript basierend auf einer Art „Frage“ (ab jetzt hier „Bedingung“ genannt) unterschiedlich ablaufen zu lassen.
So könnte ein PHP Skript beispielsweise basierend auf der ausgewählten Sprache unterschiedliche Übersetzungen für Inhalte anzeigen. Oder falls noch keine Cookie-Entscheidung getroffen wurde einen entsprechenden Cookie-Banner anzeigen.
Was du für eine solche Verzweigung in PHP brauchst ist der Befehl IF (bzw. teilweise auch ein ELSE), den du mit einer Bedingung verknüpfst.
1.1 Ein einfaches IF in PHP
Schauen wir uns gleich mal ein einfaches IF an. Ein sehr einfaches IF könnte in PHP z.B. so aussehen:
$zahl = 1; if ($zahl < 3) { echo "Zahl ist kleiner als 3"; }
Dieses Skript würde „Zahl ist kleiner als 3“ ausgeben, wenn der Wert der Variable $zahl kleiner als 3 ist. Da dies zutrifft ($zahl ist ja 1), wird der Text ausgegeben.
Wenn wir nun die Variable $zahl z.B. auf die Zahl 5 abändern und das Skript erneut laufen lassen, stimmt unsere Bedingung nicht mehr. Alles, was zwischen den {}-Klammern steht, wird dann übersprungen.
Die Struktur eines einfachen IFs ist dabei immer gleich aufgebaut:
if (<Bedingung>) {
<Mach etwas>
}
Die Bedingung muss dabei immer innerhalb einer runden Klammer stehen.
(Wenn in der geschwungenen Klammer {} nur ein einziger PHP-Befehl zu finden ist, kann diese auch weggelassen werden. Aber gerade für den Anfang ist es empfehlenswert, sie trotzdem zu machen, um eine Fehlerquelle auszuschließen.)
1.2 Ein IF mit einem ELSE in PHP
Oft möchte man vielleicht nicht nur dann etwas vom Skript machen lassen, wenn eine Bedingung erfüllt ist (entweder etwas tun oder gar nichts tun).
Wäre es nicht auch nett, wenn man eine Art entweder-oder-Struktur machen könnte? Also tu dieses oder tu stattdessen jenes?
Das ermöglicht dir ein zusätzlicher ELSE-Block zu deinem IF-Block dazu:
$zahl = 1; if ($zahl < 3) { echo "Zahl ist kleiner als 3"; } else { echo "Zahl ist größer oder gleich 3"; }
Anstatt nun nur dann etwas auszugeben, wenn die Zahl kleiner als 3 ist, wird nun in jedem Fall etwas ausgegeben.
Es entsteht also eine klassische Verzweigung in PHP: entweder dies oder jenes.
Hier nochmal das Grundprinzip dahinter:
if (<Bedingung>) {
<Mach etwas>
}
else {
<Sonst mach stattdessen das hier>
}
1.3 Welche Arten von einfachen Bedingungen es in PHP gibt
Grundsätzlich gibt es in PHP 6 Arten von Bedingungen, die du in deinem IF verwenden kannst:
- $zahl < 3
- $zahl > 3
- $zahl <= 3
- $zahl >= 3
- $zahl == 3
- $zahl != 3
Die ersten 4 sind dabei vermutlich selbsterklärend: kleiner, größer, kleiner oder gleich, größer oder gleich.
Das doppelte Gleichheitszeichen (==) brauchst du, um zu überprüfen, ob etwas genau gleich ist.
Das Gleichheitszeichen mit dem Rufzeichen (!=) brauchst du, um zu überprüfen, ob etwas ungleich ist, also alles andere außer diesem Wert.
2. Eine neue Rechenart für Verzweigungen in PHP: Logische Operatoren und binäre Logik
Was vielen Programmier-Anfängern nicht klar ist: Was hinter einer Verzweigung in PHP steckt, ist eine ganz bestimmte Art zu rechnen. Mit ganz eigenen Rechen-Regeln.
Diese Rechenart nennt sich „Binäre Logik“. Das Wort „binär“ steht dabei dafür, dass die Rechnung nur zwei mögliche Ergebnisse kennt: true und false.
Keine Angst: Sie ist einfacher aufgebaut, als du denkst!
2.1 Grundlagen binärer Logik
Das wichtigste, was du über binäre Logik wissen solltest, sind 3 Dinge:
- Binäre Logik ist eine bestimmte Art zu rechnen, mit nur einigen wenigen Rechenregeln, die du kennen musst.
- Das Ergebnis dieser Rechnungen in der binären Logik ist immer entweder true oder false (das entspricht dem Datentyp boolean bei Variabeln in PHP)
- Wenn das Ergebnis true ist, wird das was in den {}-Klammern ist ausgeführt. Is das Ergebnis false, wird nichts ausgeführt (bzw. falls ein ELSE zum IF existiert, passiert stattdessen das was dort zu finden ist)
Bei jeder Rechnung mit binärer Logik hast du also gewissermaßen mindestens eine 50%-Chance, richtig zu liegen (weil es ja nur 2 mögliche Ergebnisse gibt).
Und es gibt nur wenige Rechen-Regeln.
Klingt machbar, oder?
2.2 Berechnung einfacher Bedingungen in PHP
Unsere einfachen Bedingungen von oben kannst du ganz einfach im Kopf selbst auflösen. Frag dich dabei einfach nur, ob z.B. die Aussage „$zahl < 3“ eine wahre Aussage (-> true) oder eine falsche Aussage (-> false) ist, wenn du statt der Variable $zahl z.B. die Zahl 4 einsetzt:
Nehmen wir dabei an, dass in der Variable $zahl der Wert 4 steht. Dann wären die Lösungen folgende:
- $zahl < 3 -> false
- $zahl > 3 -> true
- $zahl <= 3 -> false
- $zahl >= 3 -> true
- $zahl == 3 -> false
- $zahl != 3 -> true
Alle richtig gehabt?
Wenn nicht, überleg dir vielleicht noch einen anderen Wert für die Variable $zahl, und versuchs noch ein paar Mal. Hier z.B. die Ergebnisse, wenn du für $zahl den Wert 3 einsetzt:
- $zahl < 3 -> false
- $zahl > 3 -> false
- $zahl <= 3 -> true
- $zahl >= 3 -> true
- $zahl == 3 -> true
- $zahl != 3 -> false
Ich vermute mal, soweit wars nicht weiter schwierig für dich.
Was aber, wenn wir z.B. überprüfen wollen, ob eine Zahl zwischen zwei Werten ist?
Dann reicht eine einzige einfache Bedingung nicht mehr aus.
Was uns zum Verknüpfen von einfachen Bedingungen bringt.
2.3 Einfache Bedingungen in PHP mit logischen Operatoren verknüpfen
Wollen wir z.B. eine Anweisung nur ausführen, wenn eine Variable $zahl zwischen 1 und 5 ist, können wir das so lösen:
if (($zahl >= 1) && ($zahl <= 5)) { echo "Zahl ist zwischen 1 und 5"; }
Wir verwenden also nicht wie bisher nur 1 einfache Bedingung, sondern 2 davon. Dann kommt rundherum noch eine runde Klammer, und dazwischen platzieren wir ein doppeltes &-Symbol.
Das &&-Symbol steht für eine „und“-Verknüpfung, und besagt, dass beide Teil-Bedingungen erfüllt sein müssen (true ergeben müssen), damit auch das Gesamtergebnis true sein kann. Ist nur eine Bedingung (oder auch beide) falsch, ist das Endergebnis auch falsch.
Es gibt in PHP (und eigentlich jeder Programmiersprache) einige bestimmte Möglichkeiten für die Verknüpfung:
- && „und“ -> beide müssen stimmen, sonst false
- || „oder“ -> mindestens 1 muss stimmen, sonst false
- ^ „xor“, „entweder-oder“ -> genau 1 muss stimmen, sonst false
- ! „not“ -> Umkehrung des Ergebnisses (true wird zu false, false wird zu true)
- () -> Klammern, wie beim „normalen“ Rechnen ändern sie die Reihenfolge
Die beiden senkrechten Striche für das „oder“ findest du übrigens auf der Tastatur in Windows-Systemen meist auf der Taste, auf der du auch das kleiner-Zeichen findest. Dabei musst du die Alt-Gr-Taste und die kleiner-Taste drücken.
Das ^-Zeichen für das „entweder-oder“ findest du auf den meisten Tastaturen unter Windows links oben.
Weil die Verknüpfungen von Bedingungen für Anfänger oft schwierig ist, hier eine Reihe von Beispielen:
2.4 Einige Beispiele zur Verknüpfung von Bedingungen in PHP
In der Folge findest du einige Beispiele für IF-Anweisungen, die auf verschiedene Arten verknüpft wurden.
Darunter findest du Start-Werte für die im IF verwendeten Variablen und die dazugehörigen Ergebnisse.
if (($zahl >= 1) && ($zahl <= 5)) {
- $zahl = 3 -> true
- $zahl = 7 -> false
- $zahl = 1 -> true
- $zahl = 0 -> false
if (($zahl >= 1) && (! $zahl <= 5)) {
(Achtung auf das Rufzeichen!)
- $zahl = 3 -> false
- $zahl = 7 -> true
- $zahl = 1 -> false
- $zahl = 0 -> false
if (($zahl >= 1) || ($zahl <= 5)) {
- $zahl = 3 -> true
- $zahl = 7 -> true
- $zahl = 1 -> true
- $zahl = 0 -> true
if (($zahl >= 1) ^ ($zahl <= 5)) {
- $zahl = 3 -> false
- $zahl = 7 -> true
- $zahl = 1 -> false
- $zahl = 0 -> true
Was aber, wenn wir mehr als 2 einfache Bedingungen verknüpfen wollen?
Welche zwei einfachen Bedingungen werden dann als erstes verknüpft?
Um das rauszufinden, müssen wir die Prioritätsregeln in der binären Logik kennen.
2.5 Reihenfolge der Berechnung in der binären Logik
Die Reihenfolge der Berechnungen in der binären Logik ist wie folgt:
- ()
- !
- &&
- || und ^
Sehen wir uns dazu das folgende Beispiel an (Wir nehmen an, dass die Variable $zahl den Wert 4 besitzt:
if (($zahl >= 1) && ($zahl <= 5) || ($zahl == 15)) {
Die Reihenfolge der Auflösung ist dabei folgende:
- Die einzelnen einfachen Bedingungen auflösen: ((true) && (true) || (false))
- Die &&-Verknüpfung auflösen: ((true) || (false))
- Die ||-Verknüpfung auflösen: (true)
Das IF wird also ausgeführt.
Nehmen wir nun an, dass die Variable $zahl den Wert 7 besitzt:
- Die einzelnen einfachen Bedingungen auflösen: ((true) && (false) || (false))
- Die &&-Verknüpfung auflösen: ((false) || (false))
- Die ||-Verknüpfung auflösen: (false)
Das IF wird also übersprungen.
Was, wenn die Variable $zahl den Wert 15 besitzt?
- Die einzelnen einfachen Bedingungen auflösen: ((true) && (false) || (true))
- Die &&-Verknüpfung auflösen: ((false) || (true))
- Die ||-Verknüpfung auflösen: (true)
Das IF wird also ausgeführt.
Nun bauen wir noch einige Rufzeichen (!) und eine Klammer um das oder (||) ein, um die Reihenfolgen zu ändern (der Wert von $zahl bleibt auf 15):
if (($zahl >= 1) && ( !(($zahl <= 5) || (! $zahl == 15)) )) {
- Die einzelnen einfachen Bedingungen auflösen: ((true) && (!((false) || (!true))))
- Die innere Umkehrung (!) bei der letzten Teilbedingung auflösen: ((true) && (!((false) || (false))))
- Die ||-Verknüpfung auflösen: ((true) && (!(false)))
- Die Umkehrung (!) auflösen: ((true) && (true))
- Das &&-und auflösen: (true)
Das IF wird also ausgeführt.
3. Verschachtelte IF und ELSE IF für erweiterte Verzweigungen in PHP
Das Interessante an den IF und den ELSE ist, dass man sie auf verschiedene Weisen verschachteln kann.
Innerhalb der {}-Klammern eines IF oder eines ELSE kann wieder ein neues IF stehen, und so weiter.
Hier ein kleines Beispiel, wie so etwas aussehen könnte:
if (($zahl >= 1) && ($zahl <= 5)) { echo "Zahl ist zwischen 1 und 5"; if ($zahl == 3) { echo "Die Zahl ist nämlich genau 3!"; } } else { echo "Zahl ist NICHT zwischen 1 und 5"; }
Es ist aber auch möglich, mehrere IF mit Hilfe von ELSE IF aneinanderzureihen, um Bereiche abzudecken.
Stell dir z.B. vor, du willst unterschiedliche Dinge tun, wenn eine Variable Werte einnimmt zwischen:
- >1000
- 101-1000
- 11-100
- 1-10
- 0
- <0
Das könnte so aussehen:
if ($zahl > 1000) { echo "Du bist reich!"; } else if ($zahl > 100) { echo "Du hast mehr als viele!"; } else if ($zahl > 10) { echo "Du hast ein bisschen mehr!"; } else if ($zahl > 0) { echo "Du hast etwas Gold"; } else if ($zahl == 0) { echo "Du hast NICHTS!"; } else { echo "Du hast leider Schulden!"; }
Falls du dich fragst, warum man z.B. beim zweiten Teil nicht auch überprüfen muss, ob die Zahl auch kleiner als 1000 ist: Der Trick ist im ELSE versteckt.
Wäre die Zahl über 1000, würde das Programm schon in den ersten Block unseres IF gehen, und alles danach überspringen.
Ist die Zahl jedoch NICHT größer als 1000, wird das nächste IF nach dem ELSE überprüft – bis das Skript etwas findet was als Ergebnis true ergibt (also zutrifft).
4. Einige letzte Hinweise zu Verzweigungen in PHP
Hier noch einige letzte kleine Hinweise zu Verzweigungen in PHP für dich:
4.1 Binäre Logik-Überprüfungen abkürzen bei boolean-Werten
Wenn deine Variable den Wert true oder false hat, kannst du statt
if ($erwachsen == true) {
auch nur
if ($erwachsen) {
schreiben.
Statt
if ($erwachsen == false) {
kannst du auch
if (! $erwachsen)
schreiben. Das spart dir etwas Schreibarbeit.
4.2 Binäre Logik-Überprüfungen abkürzen bei boolean-Rückgabewerten von Funktionen
Funktionen können in PHP Werte zurückgeben. Die Funktion in_array() überprüft dir z.B., ob ein bestimmter Wert in einem Array zu finden ist, und gibt dir als Ergebnis true oder false zurück. Eine Schreibweise wie
if (in_array($group_id, $gL)) {
ist also durchaus zulässig.
Genau ist auch die Umkehrung mit Hilfe des Rufzeichens (!) möglich, um nach dem Gegenteil zu fragen:
if (! in_array($group_id, $gL)) {
4.3 Die {}-Klammern können weggelassen werden, wenn nur 1 Befehl ausgeführt wird
Statt
if ($zahl > 1000) { echo "Du bist reich!"; }
kannst du auch
if ($zahl > 1000) echo "Du bist reich!";
schreiben.
Da die Chance größer wird, Fehler einzubauen, ist dies aber für den Anfang nicht unbedingt empfehlenswert.
Was auf jeden Fall immer empfehlenswert ist, ist auf die Einrückungen zu achten.
Die Grundregel dabei ist, dass innerhalb jeder {}-Klammer (auch wenn sie weggelassen wird!) alles um jeweils 1 TAB eingerückt wird.
Das wars erstmal zu den Grundlagen der Verzweigungen in PHP.
5. Abschließendes zur binären Logik und wie wichtig sie ist
Die binäre Logik ist eines DER wichtigsten Kapitel beim Programmieren lernen. Es lohnt sich, hier etwas Zeit zu investieren und auch herumzuexperimentieren.
Genau das gleiche Prinzip wirst du nämlich dann auch bei den Schleifen benötigen.
Wie würde z.B. ein entsprechdes IF-Konstrukt aussehen, um folgende Aufgabe abzubilden:
In Österreich darf man mit dem Fahrrad fahren, wenn man eine der beiden Bedingungen erfüllt:
- Man ist mindestens 12 Jahre alt
- Man ist mindestens 10 Jahre alt und besitzt einen Fahrrad-Führerschein
Du hast zwei Variablen vorgegeben:
- $alter: Alter der Person als Zahl
- $ff: boolean-Wert (true oder false), ob die Person einen Fahrradführerschein besitzt.
Wie schaut das IF-Konstrukt dazu aus?
Aber nun erstmal viel Freude mit Verzweigungen in PHP und den Freuden der binären Logik! 🙂
P.S.: Hier eine mögliche Lösung zum Fahrrad-Führerschein-Beispiel zum Kontrollieren:
$alter = 17; $ff = true; if (($alter >= 12) || ($alter >= 10) && ($ff)) { echo "Du darfst fahren"; } else { echo "Du darfst leider noch nicht fahren"; }