PHP lernen – Kontrollstrukturen (if … else …)

Hi,

heut geht’s ab! Ich zeig‘ dir, wie du Abfragen erstellst und Vergleiche vornehmen kannst. Außerdem lernst du ein paar neue, praktische Funktionen kennen. Kontrollstrukturen bringen wieder etliche zusätzliche Möglichkeiten, um spannende Webanwendungen zu schreiben. Gehen wir’s an!

Kontrollstrukturen

Das Wort „Kontrollstrukturen“ klingt, wenn man sich so wie du bisher nichts darunter vorstellen kann, ziemlich behindert. Hä, Kontrollstrukturen, was für Shit? Doch dahinter verbirgt sich wieder ein Schlüsselkonzept der Programmierung – Kontrollstrukturen gibt es in jeder Programmiersprache und sie sind essentiell, um den Programmfluss zu steuern. So richtig Bewegung und Logik kommt nämlich erst hiermit in deine Programme rein.

Kontrollstrukturen sind ein Sprachkonstrukt, mit dem wir Aktionen ausführen können aufgrund von Bedingungen die erfüllt oder nicht erfüllt wurden. Ein Ausdruck wird ausgewertet zu einem (boolschen) Wahrheitswert. Den Datentyp „Boolean“ hast du im Artikel mit den Variablen und Datentypen schon kennen gelernt, damals konnten wir damit aber noch nicht viel tun – das ändert sich ab heute!

Ausdruck wird zu einem Wahrheitswert ausgewertet? Wat?
Nun, jede Art von Prüfung oder Vergleich wird im Endeffekt ausgewertet zu true oder false. true bedeutet soviel wie „trifft zu“ und false dann logischerweise „trifft nicht zu“. So wie man eine Frage mit Ja (true) oder Nein (false) beantworten kann oder -bleiben wir technisch- wie ein Zustand nur 0 oder 1 sein kann. In der Programmierung geht’s präzise zu, da gibt’s kein „Vielleicht“. Ein Ausdruck ist entweder wahr oder falsch.

Eine recht simple Sache im Grunde, du wirst sehen. Man könnte zum Beispiel prüfen, ob der vom Benutzer eingegebene Text ein Zahlenwert ist (Integer oder Float). Und falls ja, wird irgendeine Aktion ausgeführt. Falls nicht, kann alternativ eine andere Aktion ausgeführt werden, wie zum Beispiel die Ausgabe des Textes „Bitte gib einen Zahlenwert ein und versuche es erneut.“. Im Endeffekt beschreibe ich gerade die Funktionalität, die uns im vorherigen Artikel bei den Formularen noch gefehlt hat.

Jetzt stellt sich die Frage, was wir alles prüfen und vergleichen können – und vor allem wie. Und genau hierfür gibt es die sogenannten …

Vergleichsoperatoren

Und was sind „Vergleichsoperatoren“? Na eigentlich müsstest du es schon selber wissen, ist Mathe-Stoff aus der 1. Klasse. Wir können Werte miteinander vergleichen, zum Beispiel, ob ein Text gleich einem anderen Text ist (beisp. bei einer Passwortabfrage, da muss die Eingabe mit dem festgelegten Kennwort übereinstimmen – das wäre ein Text-Vergleich) oder ob eine Zahl gleich / ungleich / größer / kleiner ist wie eine andere Zahl.

Stell dir vor du willst prüfen, ob die Zahl 4 größer ist als 9 (also wenn 4 > 9 ). Dieser Ausdruck würde zu false ausgewertet werden, ist also nicht wahr, denn 4 ist nicht größer sondern kleiner als 9.

Meist werden wir nicht mit Zahlen direkt zu tun haben, sondern mit Variablen oder Arrays, die Zahlen als Werte enthalten.

Welche Vergleichsoperatoren gibt es?

Einige, und die meisten kennst du sicher aus der Schule. Ich verwende die Variablen $a und $b. Die Werte darfst du dir in Gedanken hinein interpretieren. Eine kurze Tabelle, welches es gibt (oder in einer schönen Übersicht hier). Wenn du dir denkst „ohje der Shit sieht kompliziert aus“, kein Problem, überspringe das und lies ab dem nächsten Absatz weiter.

  • $a == $b
    Ergibt true, wenn $a gleich $b ist.
    Beispiele:
    (1 == 2 ) ergibt false
    (4 == 4) ergibt true
    („3“ == 3) ergibt true (obwohl die erste 3 vom Typ String ist)
    (5.0 == 5) ergibt true
  • $a === $b
    Ergibt true, wenn $a gleich $b ist und beide vom gleichen Datentyp sind.
    Beispiele:
    (2 === 3) ergibt false
    (2 === 2) ergibt true
    („2“ === 2) ergibt false
    (2.0 === 2) ergibt false
  • $a != $b
    Ergibt true, wenn $a nicht gleich $b ist.
    Beispiele:
    (2 != 3) ergibt true (weil 2 ja tatsächlich nicht 3 ist)
    (4 != 4) ergibt false
  • $a <> $b
    Das gleiche wie mit „!=“ nur eben eine andere Schreibweise.
  • $a !== $b
    Ergibt true, wenn $a nicht gleich $b ist oder wenn beide nicht vom gleichen Typ sind.
    Beispiele:
    („2“ !== 2) ergibt true
    (2 !== 2) ergibt true
    („2“ !== 3) ergibt true
    (2 !== 2) ergibt false (weil ja beide Werte gleich und beide vom gleich Typ sind)
  • $a > $b
    Ergibt true, wenn $a größer $b ist.
    Beispiele:
    (4 > 2) ergibt true
    (2 > 4) ergibt false
  • $a < $b
    Ergibt true, wenn $a kleiner $b ist.
    Beispiele:
    (4 < 2) ergibt false
    (2 < 4) ergibt true
  • $a >= $b
    Ergibt true, wenn $a größer oder gleich $b ist.
    Beispiele:
    (4 >= 3) ergibt true
    (4 >= 4) ergibt true
    (4 >= 5) ergibt false
  • $a <= $b
    Ergibt true, wenn $a kleiner oder gleich $b ist.
    Beispiele:
    (4 <= 3) ergibt false
    (4 <= 4) ergibt true
    (4 <= 5) ergibt true

 

Wichtig: Unterscheidung von Vergleich und Zuweisung

Wie Variablen oder Arrays deklariert werden weißt du bereits: die Zuweisung des Wertes wird nach dem Ist-Gleich-Zeichen vorgenommen, also quasi $Variable = "Wert"; .
Bei einem Vergleich hingegen arbeitet man mit zwei Ist-Gleich-Zeichen. Wenn ich prüfen will, ob $a gleich $b ist, würde ich das mit $a == $b  ausdrücken.

Das heißt es kann dir am Anfang passieren, dass du für einen Vergleich nur ein  = Zeichen schreibst – somit also eine Zuweisung vornimmst anstatt zwei Variablen zu vergleichen. Trotzdem wird der Code ausgeführt. Warum ist das so? Nun, weil die Zuweisung sofern sie erfolgreich war, ebenfalls true ergibt. Behalte das also als möglichen Leichtsinnsfehler im Hinterkopf.

Praxiseinsatz von Kontrollstrukturen mit PHP

Kontrollstrukturen schreibt man in PHP mit if( Bedingung ){ ... } , in Klammern kommt die Abfrage oder der Vergleich. Anschließend definiert man mit den geschweiften Klammern den sog. Anweisungsblock. Dort wird also der Code reingeschrieben der ausgeführt werden soll, wenn die Prüfung erfolgreich war (wenn die Bedingung true ergibt).

Sehen wir uns ein Code-Beispiel hierzu an:

Und im Regelfall wird man auch noch festlegen wollen, was andernfalls passiert. Dazu hängt man an die schließende geschweifte Klammer noch ein else  und öffnet einen neuen Anweisungsblock:

 

Beispiele mit weiteren Vergleichen

Weitere Zahlen-Vergleiche

Schauen wir uns andere mathematische Vergleichsoperatoren an:

Text-Operatoren

Das ganze funktioniert mit Zahlen oder auch mit Text:

Die Funktion substr holt aus einem String einen gewünschten Teil raus, in dem Fall aus der Variable $text ab dem nullten (0) Index des Strings 1 Zeichen.

Wichtig ist … !

… dass du dir merkst, dass wir bei Kontrollstrukturen immer eine Bedingung auf ihren Wahrheitsgehalt hin prüfen, und der kann nur WAHR oder FALSCH sein (eben true oder false). Dabei ist es ganz egal, welche Datentypen, Variablen oder Arrays wir in welcher Art und Weise vergleichen möchten, es kann immer nur true oder false dabei raus kommen. Daher empfehle ich dir, die Bedingungen mit if in Gedanken etwas anders zu formulieren. Statt „Wenn zahl ist gleich 4 ist“ denkst du dir „Wenn (zahl ist gleich 4) WAHR ist“. Wenn du so rum denkst, fällt es dir in Zukunft leichter, davon bin ich überzeugt.

Beispiel mit Benutzereingaben

Im vorherigen Artikel hatten wir mit HTML-Formularen und Benutzereingaben zu tun. Damit wir hier gleich dynamisch entwickeln können, basteln wir uns auch in dieses Beispiel ein Formular. Erstmal nur ein Textfeld.

Diesmal möchte ich keine separate Datei, an die die Formulardaten gesendet werden. Im Artikel zuvor haben wir dafür ja eine ziel.php festgelegt. Die fällt jetzt weg, und deswegen ebenso auch das action Attribut im form-Tag (Zeile 29). Damit wird beim Absenden des Formulars die aktuelle Datei aufgerufen. Daher will ich dir den ersten praktischen Einsatz von Kontrollstrukturen dabei demonstrieren, wie wir prüfen ob ein Formular abgesendet wurde. Los geht’s:

Ne ganze Menge Zeug. Lass uns mal durchgehen:

  • Oben wird zuallererst die Fehlerausgabe aktiviert – kennst du, passt.
  • Unten basteln wir wieder ein HTML-Formular:
    – Ein Textfeld
    – Ein Submit-Button
    Der Submit-Button hat diesmal ein name-Attribut. Das nehmen wir nachher in PHP zur Überprüfung her.
  • Unter dem Formular noch ein weitere PHP-Block:
  • Wir verwenden die Funktion isset() – die ist neu für dich.
    isset() erwartet eine Variable als Argument und prüft damit, ob die übergebene Variable deklariert wurde und nicht NULL ist (zu dieser NULL Geschichte kommen wir später noch). Wenn man -so wie wir- prüfen will, ob in einem Array ein bestimmtes Element vorhanden ist, übergibt man das Array mit Angabe des Index. Klar, das $_POST Array ist immer verfügbar und somit bereits deklariert, aber es enthält ja nur Elemente wenn auch ein Formular mit POST übermittelt wurde.
  • Mit if wird abgefragt, ob im $_POST Array ein Wert unter dem assoziativen Index formular_abgesendet existiert. Falls ja, erfolgt eine Ausgabe. Deswegen steht dort beim ersten Aufruf deines Skripts auch erstmal nix unter dem Formular, erst nach dem Absenden.

Ok ganz toll, aber so wirklich anfangen kann man damit noch nix. Wird Zeit dass wir was sinnvolles anstellen. Platzieren wir also in der Form 2 Textfelder für ein …

Formular zum Addieren von Zahlen

Zuerst bauen wir uns also noch ein zusätzliches Textfeld dazu. Nach dem Absenden des Formulars soll mit PHP geprüft werden, ob das Formular abgesendet wurde. Anschließend nehmen wir die zwei Benutzereingaben und konvertieren sie mittels der von PHP zur Verfügung gestellten Funktion floatval in den Datentyp float (du weißt schon, eine Dezimalzahl mit Nachkommastellen, wir wollen ja nicht nur ganze Zahlen addieren können). Die Konvertierung ist praktisch, denn wenn wir Text statt Zahlen eingeben (z.B. „Test“) wird durch die logischerweise fehlgeschlagene konvertierung der Wert auf 0 gesetzt. Checken wir das:

Cooler shit, funktioniert doch schon ganz toll. Und wenn du Text statt Zahlen eingibst, wird einfach zu 0 konvertiert.

Es gibt eine Besonderheit dir ich dir anhand eines Beispiels zeigen will. Führe den Code bei dir aus und trage im Formular ins erste Textfeld „2x“ ein und im zweiten Textfeld „x2„. Klicke danach auf „Absenden“. Was kommt dabei raus? Genau, folgende Ausgabe solltest du sehen:

2 + 0 = 2

Waaaaaas? Das macht doch gar keinen Sinn! Doch, weil nämlich die Funktion floatval (genau genommen generell die Konvertierung von Strings zu Zahlen) einfach im Text beginnende Zeichen die Zahlen sind mitnimmt und den Rest ab dem ersten Wert der keine Zahl ist wegschneidet. So wird aus „2x“ dann „2“ und aus „x2“ wird „0“.

Brutto / Netto Rechner

Ein weiteres Beispiel um aus einem Preis den Brutto oder Netto Wert zu berechnen. Dazu nehmen wir wieder ein Textfeld und 2 Submit-Buttons. Mit einem wollen wir den Netto Betrag errechnen, d.h. es wird davon ausgegangen dass vom Benutzer ein Brutto-Preis eingegeben wurde. Und mit dem anderen möchten wir den Brutto Betrag berechnen (in der Annahme dass der Benutzer einen Netto Betrag eingegeben hat).

Wichtig zu wissen ist dabei, dass im Formular nur der Submit-Button im $_POST Array übergeben wird, der angeklickt wurde. Schauen wir uns das an:

Wenn du Kommazahlen eingeben willst, vergiss nicht, dass die dann nach der englischen Schreibweise angegeben werden müssen, das heißt 12.5 anstatt 12,5 (also mit Punkt als Dezimaltrennzeichen).

Gut, das funktioniert ja schon sehr schön, allerdings haben wir nicht spezifiziert, bis auf wieviele Stellen gerundet werden soll. Dafür gibt’s die coole Funktion number_format, die nicht nur dafür sorgt dass das Ergebnis gerundet wird sondern auch, dass wir die Zahl in deutschem Format ausgeben können. Schreibe den Code in den beiden Kontrollstrukturen also geringfügig um:

Wir übergeben an number_format die zu formatierende Zahl, die Anzahl an Nachkommastellen, das Trennzeichen für Nachkommastellen und das Tausender-Trennzeichen. Exakt in der Reihenfolge.

Verschachtelte WENN-DANN Bedingungen

Hier hab ich einen neuen Code vorbereitet, in dem wir uns verschachtelte Bedingungen ansehen können. Wir möchten, dass der Benutzer einen Wert in das Textfeld eingibt, mit folgenden Bedingungen:

  1. Der Wert muss eine gültige, ganze Zahl sein (keine Kommazahl)
  2. Die Zahl muss kleiner als 100 sein
  3. Die Zahl muss ohne Rest durch 2 teilbar sein

So funktioniert’s:

Das ist doch schon ganz schön viel Code. Gehen wir das in Ruhe durch um in Erfahrung zu bringen, was dort passiert:

  1. Wir haben wieder ein Formular mit einem Eingabefeld („zahl“) und einem Absenden-Button („submit“).
  2. Nach dem Absenden wird geprüft, ob das Formular abgesendet wurde. Wie immer mit isset.
  3. Wir speichern die Eingabe des Benutzers in die Variable $Eingabe.
  4. Es wird mit der Funktion is_numeric geprüft, ob die Variable $Eingabe nur aus Zahlen besteht.
  5. Danach konvertieren wir die Eingabe zum Datentyp Integer. Warum? Theoretisch können wir Text der nur aus Zahlen besteht auch addieren, das wäre logisch gesehen aber unsauber und falsch. Wenn wir mathematische Berechnungen durchführen, sollten wir mit Integer oder Float arbeiten.
  6. Danach wird geprüft, ob die Zahl jetzt kleiner als 100 ist.
  7. Jetzt kommt was neues: der Modulus-Operator (kurze Übersicht) der durch ein %  Prozent-Zeichen dargestellt wird, berechnet den Rest einer Division. Wenn eine Zahl geteilt wird und ein Rest bleibt (9 / 4 = 2 Rest 1), kann man den mit dem Modulus Operator ermitteln (somit also 9 % 4 = 1). Damit checken wir also, ob die Benutzereingabe geteilt durch 2 einen Rest von 0 hat.
  8. Wenn alles erfolgreich war, wird eine Meldung ausgegeben (und wenn man was falsch gemacht hat auch schon vorher, damit man als Benutzer ein Feedback bekommt).

Und schon ist das alles gar nicht mehr so kompliziert. Deutlich gemacht wurde hier die Anwendung von verschachtelten Bedingungen. Nach und nach prüfen wir verschiedene Fällt und können mit jedem Schritt sicherer sein, dass die Benutzereingabe dem gewünschten Format entspricht. Wie du siehst mussten wir oben zuerst sicherstellen, dass die Eingabe nur aus Zahlen besteht, erst danach konvertieren wir die Eingabe in den Datentyp Integer.

Fallstrick is_numeric

Lass mich dich noch kurz darauf hinweisen, dass die Funktion is_numeric eine Variable darauf prüft, ob sie nur Zahlen enthält (im Erfolgsfall wird true zurückgegeben, die Bedingung ist WAHR). Für den Fall also eine super Funktion, weil wir eine Ganzzahl erwarten. Würden wir im Beispiel auch Kommazahlen zulassen, wäre die Funktion jedoch nicht hilfreich, denn Kommazahlen enthalten nicht nur Zahlen sondern eben auch den Punkt bzw. das Komma als Dezimaltrennzeichen. Hierfür würden wir uns dann einer anderen Vorgehensweise bedienen:

Was noch viel wichtiger ist, und behalte das immer im Kopf, für jedes Problem gibt es in 99,99% der Fälle mehrere Lösungen. Merk dir das immer.

Multiple Bedingungen

Bisher konnten wir mit dem if … else Konstrukt eigentlich immer nur 2 Fälle prüfen. Im if-Anweisungsblock wird der Code ausgeführt wenn die Bedingung zutrifft (true), im else Block wird der Code ausgeführt, falls die Bedingung nicht zutrifft (false). PHP kennt darauf aufbauend ein weiteres Sprachkonstrukt das mit elseif geschrieben wird, und das ist dazu da, um mehr Fälle zu behandeln. Aber schauen wir uns das einfach an:

Krass oder? Wir können so mehrere Bedingungen prüfen und auf sie reagieren. Und in jedem Anweisungsblock können wir natürlich weitere, verschachtelte Bedingungen erstellen, wenn wir das möchten.

Noch ein Hinweis zum elseif – das kannst du wenn du möchtest auch in zwei Wörtern schreiben, also elseif  oder auch else if .

Ausdruck negieren

Wir können die Ausdrücke (ob wir es Bedingungen oder Ausdrücke nennen, darfst du dir aussuchen) auch ins negative umkehren. Klar, wenn eine gewünschte Bedingung nicht zutrifft, können wir den Code dafür auch in den else-Block schreiben. Aber es wird auch sehr viele Fälle geben, bei denen es gewünscht ist, dass die Bedingung FALSCH ist – das können wir formulieren als „WENN (Bedingung ist WAHR) FALSCH ist“ oder „WENN (Bedingung ist FALSCH) WAHR ist“. Oben habe ich dir die Vergleichsoperatoren vorgestellt. Mit !=  prüfen wir auf „ist nicht gleich“ bzw „ist ungleich“. Wir können aber auch einen geklammerten Ausdruck mit vorangestelltem Ausrufezeichen ins Gegenteil umkehren.

Ich zeige dir das anhand eines Beispielt in dem wir möchten, dass Variable $Wert nicht komplett aus Zahlen besteht. Das können wir auf zweierlei Arten prüfen:

Die Funktion is_numeric ergibt wie schon gesagt true, wenn die übergebene Variable nur Zahlen enthält. In beiden Fällen nehmen wir also den Rückgabewert von is_numeric entgegen (was true oder false sein kann) und checken, ob wir false bekommen, was dann auf die Bedingung bezogen wieder true ergibt. Als Programmierer formuliert man sich das im Kopf als „WENN (BEDINGUNG ist FALSCH) WAHR ist“. Ich glaub ein Praxisbeispiel klärt hier wieder viele Fragen:

Die Ausgabe des Codes ist folgende:

Am interessantesten ist der 6. und 7. var_dump (steht auch in den Kommentaren wo es interessant wird). Eine Prüfung mit is_numeric auf den Wert „abc“ gibt natürlich false zurück, effektiv erfolgt hier also die Abfrage, ob false gleich false ist – was true ergibt. Ebenso wie !false auch true ergibt (nicht-false = true).
Soweit verstanden? Probier einfach ein bisschen rum – du lernst nur was, wenn du selbst Code schreibst, nur so kannst du Dinge 100%ig verstehen.

Logische Operatoren …

… sind ziemlich geiles Zeug, wenn wir schon mit if-Anweisungen arbeiten können. Damit können wir mehrere Ausdrücke logisch verketten mit UND, ODER und ENTWEDER-ODER.

  • UND (Operator && oder AND)
    Es müssen zwei (oder mehr) Bedingungen WAHR sein.
  • ODER (Operator || oder OR)
    Es muss mindestens eine Bedingung WAHR sein (eine oder mehrere).
  • ENTWEDER-ODER (Operator XOR)
    Es darf nur die eine oder andere Bedingung WAHR sein, aber nicht beide zugleich. Man nennt den Operator auch Exklusiv-Oder. Wahnsinn was es alles für Begriffe gibt, oder?

Ein kurzer Überblick:

Die Ausgabe dazu:

Sinn macht das, wenn wir z.B. prüfen wollen, ob eine Zahl größer als 50 UND kleiner als 100 ist. Man kann das entweder in zwei verschachtelten Abfragen machen (wie du es schon kennengelernt hast) oder durch die Verknüpfung von Bedingungen mit logischen Operatoren.
Ein Beispiel mit beiden Möglichkeiten:

Bei Möglichkeit #1 prüfen wir zuerst einen Fall, wenn der zutrifft den nächsten Fall. Bei Möglichkeit #2 prüfen wir gleich, ob beide Bedingungen true ergeben.

Möglichkeit #1 hat hier den „Vorteil“, dass man, wenn nur die erste Bedingung erfolgreich ist, dort noch zusätzliche Anweisungen ausführen kann. Das heißt wir könnten prüfen ob die Zahl größer als 50 ist und falls ja vor oder nach der zweiten Prüfung noch beliebigen Code ausführen der eben nur zutrifft, wenn Zahl auf jeden Fall größer als 50 ist. Es kommt einfach darauf an, was man vorhat.

Mehrere logische Operatoren verwenden

Auch bei logischen Operatoren gibt es (ebenso wie in der Mathematik) die Klammern-Regel. So können wir so viele Ausdrücke prüfen wie wir wollen. Zum Beispiel ob eine Zahl größer als 0 UND kleiner als 100 ODER größer als 500 UND kleiner als 1000. Wenn wir Klammern setzen, können wir genau festlegen, wie die Ausdrücke ausgewertet werden sollen, außerdem dient es der besseren Übersicht und dem leichteren Verständnis.

Nehmen wir das eben genannte Beispiel:

Wir klammern beide UND-Ausdrücke und legen mit ODER fest, dass wenigstens eine der beiden zutreffen muss.

Beispiel mit Exklusiv-ODER

Wir fordern den Benutzer auf, einen Namen einzugeben der ENTWEDER mit einem „B“ beginnt ODER mit „B“ endet – er darf aber nicht mit „B“ beginnen UND mit „B“ enden („BOB“ wäre somit nicht zulässig, „BERND“ jedoch schon).

Formulieren wir das in Code:

Der Einfachheit halber gehen wir davon aus, dass der Name in Großbuchstaben vorliegt – später lernen wir effizientere Möglichkeiten kennen. Jedenfalls tut der Code aber genau das was er soll. Mit substr($Name, 0, 1)  holen wir den ersten Buchstaben von $Name, mit substr($Name, -1, 1)  den letzten (mehr zu substr). Mit XOR legen wir fest, dass nur eine der beiden Bedingungen WAHR sein darf.

Und wie immer kannst du dann im Anweisungsblock -sofern erforderlich- beliebig viele weitere verschachtelte Bedingungen auswerten … du bist der Chef deines Programms 🙂

Auswertung von Ausdrücken ohne if

Du kannst Bedingungen auch direkt im Code ohne zusätzliche if-Anweisung auswerten – und das Ergebnis dann beispielsweise einer Variable zuweisen.

Ein Beispiel hierzu – wir weisen einer Variable $Var true zu, wenn eine Zahl größer als 5 ist. Dabei nutzen wir den ganz normalen Weg den du schon kennst:

Führen wir den Code aus, erhalten wir folgende Ausgabe:

Macht soweit Sinn. Können wir aber auch viel kürzer haben – schau dir das mal an:

Falls du’s nicht gleich siehst – Zeile 10. Wir werden also quasi inline einen Ausdruck aus und zur besseren Übersichtlichkeit (und das empfehle ich dir ebenso zu machen) wird dieser in Klammern gesetzt. Bedeutet im Klartext dass wir an der Stelle eine Zuweisung eines Wertes für die Variable $Var vornehmen, und der Wert ist in dem Fall das Ergebnis eines Ausdrucks. Wie ich schon mal sagte, es gibt für Ausdrücke nur Ergebnisse die WAHR oder FALSCH sein können.

So richtig Sinn wird das machen, wenn wir Funktionen kennenlernen. Wie auch immer, es gibt bei der ganzen Geschichte einen Haken – wir können auf diese Weise entweder true oder false auswerten, jedoch nicht (wie bei einer normalen if-Anweisung) festlegen, was bei else passiert, d.h. wir können nur auf ein Ergebnis reagieren. Zum Glück gibt’s dafür aber auch was:

WENN-DANN Anweisungen ohne if … else …

Wir können -ähnlich wie wir es eben gemacht haben- Bedingungen auswerten und sowohl auf true als auch auf false reagieren. Das geht mit der Kurzschreibweise (Short Syntax mit dem ternären Operator), die ich dir gleich zeige. Sehen wir uns zuerst ein klassisches Beispiel an:

Wir checken, ob die Zahl größer als 10 ist oder nicht – dementsprechend passen wir unseren Text an. Soweit cool. Kriegen wir das mit der Kurzschreibweise mit weniger Code hin? Allerdings, wir können das alles auf 2 Zeilen beschränken:

BAM! Krass, oder? Mit echo geben wir Text aus, dazwischen haben wir in Klammern eine Bedingung, das Ganze ist in 3 Teile aufgeteilt:

  • Zuerst die Bedingung (WENN irgendwas WAHR ist …).
  • Falls die Bedingung WAHR ist, führe den Code nach dem Fragezeichen aus.
  • Falls die Bedingung FALSCH ist (else), führe den Code nach dem Doppelpunkt aus.

Einiges haben wir für heute schon geschafft, aber schauen wir uns zumm Schluss noch eine letzte, ganz wichtige Sache an:

Typsicherer Vergleich

Die Operatoren habe ich dir bereits gezeigt (gleich, ungleich, größer, kleiner und so weiter). Was du noch nicht gesehen hast, ist ein typsicherer Vergleich. Ganz am Anfang dieser PHP-Tutorial-Reihe habe ich erwähnt, dass PHP eine typschwache Sprache ist – jetzt finden wir heraus, was das bedeutet.

Am besten eignet sich hierzu ein Praxisbeispiel:

Die Ausgabe hierzu:

Was hat es damit auf sich? Nun, das liegt daran, dass Werte durch PHP implizit zu einem boolschen Wert (WAHR oder FALSCH, also true oder false) ausgewertet werden können. So ergibt ein leerer String zum Beispiel false, während ein String mit Inhalt zu true ausgewertet wird. Eine kleine Übersicht:

Ist WAHR

  • „abc“
  • 5
  • -2
  • [„wert im array“]

Ist FALSCH

  • „“ (leerer String)
  • 0 (Zahl 0)
  • [] (leeres Array)

Gehen wir auf die typschwäche ein. PHP erlaubt es uns (im Gegensatz zu vielen anderen Programmiersprachen) Datentypen zu mischen und automatisch in einen anderen zu konvertieren. So können wir zum Beispiel Strings addieren – was eigentlich nicht Sinn der Sache ist, denn dafür gibt es ja eigentlich Datentypen wie Integer oder Float. Schau her:

Das hier ist die Ausgabe:

Überrascht? Ohne dass wir was gemacht haben, hat sich der Datentyp der Variable geändert. PHP hat erkannt, dass wir eine Addition vornehmen, und den Datentyp entsprechend zu einem Integer geändert. Wir man Datentypen explizit angeben kann, erfährst du in einem späteren Artikel.

Fazit

Wie du siehst, können wir mit Kontrollstrukturen fantastische Dinge tun – den Programmfluss anhand von Bedingungen steuern und Dynamik in unsere Anwendungen bringen. Wie oben erwähnt ist das ein sehr wichtiges und essentielles Konstrukt der Softwareprogrammierung. Falls du Fragen dazu hast, lass einen Kommentar da.

Im nächsten Artikel zeige ich dir sog. Schleife, mit denen sich Code wiederholt ausführen lässt – auch eine super Sache.

Grüße
Marius

 

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich stimme zu.