|
IF Abfragen, auf Ereignisse reagieren
Jetzt haben wir gelernt wie man in Variablen Werte speichert. Jetzt wollen
wir nicht nur speichern, sondern auch auf die Ergebnisse reagieren. Um auf
ein Ereignis zu reagieren gibt es viele Möglichkeiten. Wir widmen uns jetzt
der php if Abfrage.
Beispiel:
<?php $a = 10; $b = 7;
if ($a > $b) { echo "$a ist größer als $b."; }
if ($a < $b) { echo "$a ist kleiner als $b."; }
if ($a != $b) { echo "$a ist nicht genauso groß wie $b."; }
if ($a == $b) { echo "$a ist genauso groß wie $b."; } ?>
|
Das if erwartet in runden Klammern die Bedingung die
Eintreten soll. if bedeutet im deutschen WENN.
Als erstes haben wir $a den Wert 10 und $b den Wert 7 gegeben.
Die erste WENN (if) Abfrage:
Wenn $a größer als $b , dann soll er die Befehle ausführen, die
in den geschwungenen Klammern danach kommen. Trifft diese Bedingung nicht ein,
dann werden die Befehle in den geschwungenen Klammern nicht ausgeführt.
Das zweite WENN (if):
Wenn $a kleiner als $b ist, dann führe die Befehle in den geschwungenen Klammern aus.
Das dritte WENN (if):
Wenn $a ungleich $b ist, dann führe die Befehle in den geschwungenen Klammern aus.
Das vierte WENN (if):
Wenn $a gleich $b ist, dann führe die Befehle in den geschwungenen Klammern aus.
Ihr werdet merken, dass dort nicht ein Gleichheitszeichen steht sondern zwei. Ihr werdet
euch fragen: "Warum ?". Ganz einfach:
Merke: Wenn ich nur ein Gleichheitszeichen = verwende, dann weise
ich der linken Variable den Wert von dem zu, was auf der rechten Seite vom Gleichheitszeichen
steht. Ein einfaches Gleichheitszeichen ist also eine Zuweisung. Will ich wissen ob der linke
Wert vom Gleichheitszeichen mit dem vom rechten Wert neben dem Gleichheitszeichen identisch ist,
dann muss ich zwei == Gleichheitszeichen verwenden. Dies ist eine häufige Fehlerquelle !
Es gibt sogar noch Abfragen mit drei Gleichheitszeichen. Das solltet Ihr schonmal gehört haben,
muss euch am Anfang aber nicht interessieren.
Schreibe ich zum Beispiel:
<?php if ($a = $b) { echo "Test"; } ?>
|
... dann prüfe ich in der WENN Bedingung nicht, ob die Werte identisch sind.
In diesem Fall enthält $a hinterher das selbe wie $b und IF überprüft
nur ob diese Zuweisung geklappt hat. Natürlich hat es klappt. In $a ist nun dasselbe
gespeichert wie in $b, also hat es geklappt und IF führt die Befehle in den
geschwungenen Klammern aus, auch wenn $a vorher 10 war und $b zum Beispiel 7 war !
10 ist nicht genauso groß wie 7 , aber genau das haben wir ja nicht abgefragt sondern
nur aus der gespeicherten 10 (in $a) eine 7 (gespeichert in $b) gemacht ! Solche "dummen"
Fehler können passieren und eine regelrechte Suchaktion auslösen. Dies kann nämlich
der Beginn einer Kettenreaktion sein, wenn wir selber in $a und $b andere Werte erwarten, diese
aber mittlerweile anders sind und in späteren Programmteilen weiterverarbeitet werden und
"natürlich" nicht das erwartete liefern.
WENN $a == $b DANN { } ANDERNFALLS MACHE { }
Manchmal will man etwas vergleichen und darauf AUCH reagieren wenn die Bedingung
NICHT zutrifft. Wir könnten zum Beispiel fragen WENN $a == $b dann mache
das was in den geschwungenen Klammern steht. WENN dies aber NICHT zutrifft
dann mache was anderes. Dies schafft man mit else.
Beispiel:
<?php $a = 2; $b = 5;
if ($a > $b) { echo "$a ist größer als $b."; } else { echo "$a ist nicht größer als $b."; } ?>
|
Wir fragen PHP ob $a größer als $b ist. Dies ist in diesem
Fall nicht so, also wird der Code in den ersten geschwungenen Klammern NICHT ausgeführt.
Dann kommt else, was dem PHP Programm sagt dass wenn dies nicht zutrifft,
dann führe das aus was JETZT in den geschwungenen Klammern kommt.
Eine Anmerkung zur Lesbarkeit von PHP Code
Man muss PHP Befehle nicht zwangsweise pro Zeile nur einmal schreiben. Man könnte in einer
einzigen Zeile auch mehrere PHP Befehle schreiben.
Beispiel:
<?php $a = 10; $b = 7; $ergebnis = $a + $b; ?>
|
Dieses Beispiel würde funktionieren. Wir haben nach jedem PHP Befehl brav ein Semikolon gesetzt.
Es trägt aber nicht unbedingt später zur Lesbarkeit eines großen Programms bei. Genauso
wie die PHP Befehle kann man auch bei if() Anweisungen direkt nach den runden Klammern
mit der geschwungenen Klammer anfangen. Viele Programmierer machen das und einige PHP Programmierprogramme
machen dies automatisch. Die Zeilen werden zwar weniger, aber ich persönlich finde es überhaupt
nicht leserlich. Gerade wenn plötzlich viele if() Bedingungen verschachtelt
werden, sollte man den Code der zusammengehört in einer horizontalen Höhe schreiben.
Unleserliches Beispiel:
<?php if ($a == $b){ if ($c > $d){ if ($e != $f){ echo "Ausgabe 1"; $x = $y + $z; } } else { echo "Ausgabe 2"; $x = $y - $t; } echo "Ausgabe 3"; } ?>
|
Leserliches Beispiel (macht genau das gleiche):
<?php if ($a == $b) { if ($c > $d) { if ($e != $f) { echo "Ausgabe 1"; $x = $y + $z; } } else { echo "Ausgabe 2"; $x = $y - $t; }
echo "Ausgabe 3"; } ?>
|
Entscheidet selbst - wo würdet Ihr eher sehen, was zu welcher geschwungenen if() Anweisung
gehört. Welcher Programmteil gehört zu welcher WENN Bedingung ? Ich glaube es ist klar worauf ich
hinaus will. Jeder hat hier seinen eigenen Stil, aber man sollte sich schon Gedanken darüber machen
auch seinen Code klar zu strukturieren.
|