
Bedingte Entscheidungen / Schleifen
Bedingte Entscheidungen
Sie bestimmen ob Programmabschnitte ausgeführt (abgearbeitet) werden
oder übersprungen werden.
Dies wird benötigt, da sich die Skripts
unter “bestimmten Bedingungen” anders verhalten sollen:
ZB könnte
man eine Webseite nachts mit einem “Abend-Theme” versehen und
tagsüber mit einem kontrastreicheren „Tageslook“.
Für so etwas
braucht man Entscheidungen, hier aufgrund der Zeitzone/Zeit
des
Benutzers und nicht des Servers.
Ein logisches Konstrukt frei formuliert wäre:
“Bedingung:
WENN
( die Aktuelle-Zeit ENTSPRICHT der Nachtzeit )
...DANN zeige die
Nacht-Design-Html-Datei an
SONST
...zeige die
Standard-Tages-Html-Datei an.
ende der Bedingung.”
IF
wenn-dann Entscheidungen –
nur wenn die Bedingung in den runden Klammern wahr ist (TRUE),
dann
führe folgenden Programmteil aus.
$x = 10;
$y = 0;
if ($x > $y)
echo "Der Wert der Variablen x ist größer als der der Variablen y";
Umfasst der von der Entscheidung abhängige Programmteil mehr als
einen Befehl (hier: echo) muss
dieser als Block zwischen geschweiften
Klammern stehen - { kennzeichnet den Anfang des Blocks, } das
Ende:
if ($x > $y) { // Bedingungsblock Anfang - durch { eingeleitet
echo "Der Wert der Variablen x ist größer als der der zweiten
";
echo "----------------------------------------------------------";
} // Bedingungsblock Ende – durch } abgeschlossen
Zu
jedem mit { geöffneten Block muss immer genau ein Gegenstück }
existieren,
um den Block wieder zu schließen (hier: conditional
block, d.h. der Block wird in bestimmter Abhängigkeit ausgeführt -
Konditionaler Block)
IF/ELSE
wenn-dann-sonst Entscheidungen – wenn (if)
die Bedingung wahr ist (true),
führe folgenden Programmteil aus,
sonst (else) den Teil im
else-Block (else-Zweig).
if ($x > $y) {
echo "TRUE!";
} else {
echo "FALSE!";
}
IF-ELSE VERZWEIGUNG
if (x < y) |
if (Ausdruck) |
Statt Anweisung1 |
$min = x; |
Anweisung1; |
kann auch ein Anweisungs- |
else |
[else |
block stehen; dieser muss wieder mit "{" |
$ min = y; |
Anweisung2;] |
geöffnte und mit "}" abgeschlossen werden. |
IF / ELSEIF / ELSE
“wenn-dann|sonstwenn...|sonst-Entscheidungen –
wenn (if) die
Bedingung in den runden Klammern ( Bedingung ) wahr ist (true),
führe
folgenden Programmblock (Zweig) aus,
sonst – wenn eine andere
Bedingung (elseif) wahr ist,
führe diesen Programmteil aus;
trifft
dies auch nicht zu (else) führe eben den else-Zweig
aus:
if ($x > $y) {
echo "Variable x ist größer als Variable y";
} elseif ($x < $y) {
echo "Variable x ist kleiner als Variable y";
} else {
echo "die Variablen haben den gleichen Wert";
}
ELSE-IF KETTEN
$a = 22;
if ($a < 20)
echo "Variablenwert von a ist kleiner als 20";
else if ($a > 40)
echo "Variablenwert von a ist größer 40";
else if ($a == 21)
echo "a hat den Wert 21";
else
echo "a ist weder kleiner 20, noch größer 40 und auch nicht 21";
Schleifen ("wie oft")
Durch Schleifen kann entschieden werden, wie oft etwas ausgeführt
wird (niemals, einmal, mehrmals,...);
bisher hatten wir bei if
nur die Entscheidung „wenn dann - sonst“, aber nicht "wie
oft".
WHILE-Schleifen
while (ausdruck) {
// mach etwas
}
Hier wird am Ende des while-Blocks erneut der Ausdruck auf TRUE
oder FALSE geprüft.
Solange der Ausdruck in den runden Klammern TRUE
ist, also die Bedingung für die while-Schleife zutrifft,
wird erneut
der darauffolgene Block ausgeführt.
$x = 0;
while ($x < 10) //
while (WAHR)
{
echo $x; //Anweisungsblock
$x = $x + 1;
}
Programm-Ausgabe:
0123456789
Solang $x kleiner als 10 ist, wird der Wert von $x ausgegeben UND
dann um 1 erhöht; nach 10 Durchgängen – wenn
die Bedingung FALSE
ist (d.h. 10<10 - stimmt ja nicht, liefert false) und somit
der Schleifenblock nicht mehr ausgeführt wird,
wird mit den Befehlen
nach } fortgefahren.
Würde darauf vergessen, den Wert, der in der Bedingung geprüft
wird in dem "while Block",
also zwischen {
und } zu verändern ist schnell eine "Endlosschleife"
entstanden.
FOR-Schleife
Wird meist eingesetzt, wenn abschätzbar ist, wie oft die Schleife durchlaufen werden wird bzw. wenn Befehle zB genau 10 Mal hintereinander ausgeführt werden müssen.
for (Initialisierung;
Bedingung;
"Iterationswert"-ändern) {
// Statements;
}
Solange die "Bedingung" den Wahrheitswert "true"(1)
liefert, wird die for-Schleife erneut durchlaufen.
Der
Iterationswert, der geändert wird, ist meist Bestandteil der
"Bedingung":
for ($x = 0; $x <= 10; $x = $x + 1) |
|
{ |
A1 ... Initialisierung |
echo $x; |
A2 ... Bedingung |
} |
A3 ... Re-Initialisierung |
Mit einer for-Schleife können sich Endlosschleifen weniger leicht
ergeben, |
|
// A1 ... Initialisierung |
|
{ // Statements, wenn Bedinung A2 == true |
|
} |
|
Programm-Ausgabe:
0,1,2,3,4,5,6,7,8,9,10
for ($x = 0; $x <= 10; $x = $x - 1)
{ echo $x;
}
Die zweite for-Schleife wäre doch eine "Endlosschleife",
da $x nie größer oder gleich 10 wird,
sondern immer kleiner wird
($x=$x-1) – es wird jedes Mal 1 subtrahiert und $x ist somit immer
kleiner gleich 10 -
diese Schleife würde sozusagen wieder endlos
laufen.
DO-WHILE-Schleife (how do we do)
Auch genant "Durchlauf-Schleife", da erst nach
dem ersten Durchlauf die Bedingung für einen weiteren Durchlauf
geprüft wird.
Sprich die Befehle des Schleifenblocks werden auf alle
Fälle mindestens einmal ausgeführt.
$x = 0;
do {
echo "ho ho ho";
++$x;
} while ($x < 10);