Leseprobe - HERDT

Werbung
PHP 5.6
Stephan Heller
1. Ausgabe, März 2015
Grundlagen zur
Erstellung dynamischer
Webseiten
ISBN: 978-3-86249-415-6
GPHP56
5
Kontrollstrukturen
5.7
Schleifen
Schleifen verwenden
Um einen bestimmten Teil des Programms mehrfach auszuführen bzw. zu wiederholen, benötigen Sie Schleifen. Durch die Verwendung von Schleifen sparen Sie Programmcode und können variabel festlegen, wie oft
oder bis zum Eintreffen welcher Bedingung die Schleife durchlaufen werden soll.
Folgende Schleifen gibt es in PHP:
D
while- bzw. do-while-Schleife:
Wenn Ihnen als Programmierer nicht bekannt ist, wie oft eine Anweisung wiederholt werden soll,
bzw. Sie eine Schleife so lange ausführen möchten, bis eine bestimmte Bedingung eingetreten ist, verwenden Sie die while- bzw. do-while-Schleife.
D
for-Schleife:
Wenn Sie die genaue Anzahl kennen oder diese vorher über PHP ermitteln können, wie oft eine
Anweisung wiederholt werden soll, verwenden Sie die for-Schleife.
5.8
Mit der while-Schleife arbeiten
In einer while-Schleife prüft PHP zu Beginn die vorgegebene Bedingung und führt den angegebenen
Anweisungsblock so lange aus, bis die Bedingung nicht mehr erfüllt ist. Diese Prüfung wird automatisch vor
jedem Durchlauf wiederholt. Ergibt der Test der Bedingung den Wert TRUE, wird die Schleife durchlaufen.
Liefert die Bedingung den Wert FALSE zurück, werden die Anweisungen der Schleife übersprungen und die
Abarbeitung des Programms wird nach der Schleife fortgesetzt.
Eine Prüfung vor der Ausführung des Anweisungsblocks wird als kopfgesteuert bezeichnet. Ergibt bereits
die erste Bedingungsprüfung den Wert FALSE, wird der Anweisungsblock gar nicht ausgeführt, d. h., eine
while-Schleife kann null Mal bis unendlich oft (sogenannte Endlosschleife) ausgeführt werden.
Syntax und Bedeutung der while-Schleife
D
Das Schlüsselwort while leitet die while-Schleife ein. In
runden Klammern wird die Bedingung angegeben, die
vor der Abarbeitung überprüft wird.
D
Ist der Rückgabewert der Bedingung TRUE, wird der
Anweisungsblock im Schleifenkörper ausgeführt.
D
Nach der letzten Anweisung des Anweisungsblocks bzw. mit Erreichen der schließenden geschweiften
Klammer springt PHP zum Anfang der Schleife zurück und überprüft erneut die Bedingung. Ist das
Ergebnis der Bedingungsprüfung TRUE, wird der Anweisungsblock erneut ausgeführt.
D
Diese Schritte werden so lange wiederholt, bis die Auswertung der Bedingungsprüfung am Beginn der
Schleife den Wert FALSE liefert. Die Schleife wird dann verlassen und der PHP-Code nach der Schleife
weiter abgearbeitet.
while(Bedingung) {
Anweisungsblock;
}
Beispiel: while.php
 <?php
 $zahl = 1;
 while ($zahl <= 100) {
echo "$zahl<br>";

$zahl = $zahl + $zahl;

}

 ?>
© HERDT-Verlag
49
5
PHP 5.6 - Grundlagen zur Erstellung dynamischer Webseiten

Der Startwert der Variablen $zahl wird auf den Wert 1
festgelegt.

Die Bedingung legt fest, dass die while-Schleife so lange
wiederholt werden soll, wie der Wert der Variablen $zahl
kleiner oder gleich 100 ist. Bedenken Sie, dass die Schleife
nicht ein einziges Mal ausgeführt wird, wenn der Wert der
Variablen bereits beim ersten Schleifendurchlauf größer als
100 sein sollte.

In jedem Schleifendurchlauf erfolgt die Ausgabe der
Variablen $zahl.

Der Variablen $zahl wird an dieser Stelle ein neuer Wert
zugewiesen, im Beispiel wird sie verdoppelt.

Anzeige der Beispieldatei "while.php"
Die while-Schleife wird durch die schließende Klammer
beendet. Nach jedem Schleifendurchlauf wird die Bedingung
erneut geprüft . Der Anweisungsblock in der Schleife wird so
lange ausgeführt, bis die Bedingungsprüfung FALSE ergibt.
Damit ist dann die Schleife beendet und die Abarbeitung des
Skripts wird nach der Schleife fortgesetzt.
Häufige Fehler beim Einsatz von Schleifen
Die in diesem Abschnitt beschriebenen Fehler ergeben keine Fehlermeldungen, sondern einzig ein unerwartetes Verhalten des Programms. Es handelt sich um logische Fehler:
D
Es kann passieren, dass der Variablen, die geprüft werden soll, ein Wert zugewiesen wurde, bei dem
die Bedingungsprüfung am Anfang der Schleife gleich beim ersten Schleifendurchlauf den Wert FALSE
ergibt. Das heißt, die Schleife wird nicht ein einziges Mal ausgeführt, sondern übersprungen. Achten
Sie darauf, dass die Bedingungsprüfung im ersten Schleifendurchlauf den Wert TRUE ergibt.
Endlosschleifen vermeiden
Schleifen bergen grundsätzlich die Gefahr, dass sie durch eine falsche Logik in der Programmierung in eine
Endlosschleife laufen. Dies wird Ihnen nicht als PHP-Fehler gemeldet. Der Aufruf der Datei ist möglich, das
Skript bricht ab, wenn die vom Server erlaubte Laufzeit erreicht ist (diese wird in der php.ini über den
Parameter max_execution_time bestimmt und ist standardmäßig auf 30 Sekunden eingestellt). Ist die
Skript-Laufzeit erhöht worden, werden große Datenmengen verarbeitet oder viele Datenbankaufrufe in der
Schleife abgesendet, kann dies zum Absturz Ihres Browsers oder sogar des ganzen Webservers führen.
Um Endlosschleifen zu vermeiden, müssen Sie darauf achten …
D
D
dass der Wert der zu testenden Variablen innerhalb der Schleife verändert wird und
dass Sie die Variable so verändern, dass die Schleife nicht endlos ausgeführt wird.
Beispielsweise macht es bei einem Variablenwert 1 und einer Bedingung, dass die Schleife so lange
durchlaufen wird, bis die Variable > 5 ist, wenig Sinn, bei jedem Schleifendurchlauf den Wert der
Variablen herabzusetzen. In diesem Fall würde die Schleife nicht enden, da die Bedingungsprüfung
immer das Ergebnis TRUE liefert.
Mit der do-while-Schleife arbeiten
Im Unterschied zur while-Schleife, die die Bedingung für die Wiederholung am Anfang hat, wird in der dowhile-Schleife die Bedingung erst nach der letzten Anweisung in der Schleife überprüft. Man spricht
deshalb von einer fußgesteuerten Schleife. Daraus folgt auch, dass der Anweisungsblock immer mindestens
einmal ausgeführt wird. Auch hier gilt wie bei der while-Schleife: Liefert die Bedingung einen Wert TRUE
zurück, wird die Schleife erneut durchlaufen, ansonsten wird sie verlassen.
50
© HERDT-Verlag
5
Kontrollstrukturen
Syntax und Bedeutung der do-while-Schleife
D
D
Das Schlüsselwort do leitet die Schleife ein.
D
Am Ende der Schleife wird die Bedingung der Schleife über das
Schlüsselwort while ausgewertet. Die Bedingung wird in runden
Klammern angegeben.
D
Trifft die Bedingung zu, wird die Schleife erneut ausgeführt.
5.9
Die Anweisungen im Schleifenkörper werden auf jeden Fall
mindestens einmal ausgeführt.
do {
Anweisungsblock;
}
while (Bedingung);
Mit der for-Schleife arbeiten
Im Unterschied zur while-Schleife, die so oft durchlaufen wird, bis der Test der Bedingung FALSE ergibt,
wird in der for-Schleife genau angegeben, wie oft die Schleife durchlaufen werden soll. Bei der for-Schleife
kann berechnet werden:
D
D
die Anzahl der Wiederholungen oder
Beginn und Ende der Wiederholung.
Übergeben werden der Start- und Endwert sowie die Bedingung, wie der Endwert erreicht werden soll.
Syntax und Bedeutung der for-Schleife
D
D
Die for-Schleife beginnt mit dem reservierten Schlüsselwort for.
Mit der Anweisung Initialisierung wird der Anfangswert für die Schleife festgelegt.
for ( Initialisierung; Bedingung; Reinitialisierung) {
Anweisungsblock;
}
D
Die Anweisung Bedingung legt fest, unter welchen Konditionen die Schleife durchlaufen wird. Diese
Bedingung, die vor jedem Durchlauf abgefragt wird, liefert einen Wert TRUE oder FALSE zurück. Ist
der Wert TRUE, wird die Schleife durchlaufen. Andernfalls wird das Programm mit den Anweisungen
nach der for-Schleife fortgesetzt. Die Bedingung überprüft den Initialwert noch vor dem ersten
Durchlauf. Ist das Ergebnis dieser ersten Überprüfung bereits mit den Initialwerten FALSE, wird die
Schleife erst gar nicht durchlaufen.
D
Die Anweisung Reinitialisierung legt fest, wie die Variable verändert werden soll, die in der
Bedingung ausgewertet wird. Diese Veränderung geschieht am Ende der Schleife, also nicht am
Anfang, d. h., erst beim zweiten Durchlauf der Schleife ist der Wert, der in der Initialisierung
gesetzt wurde, verändert.
D
Die drei Anweisungen werden jeweils durch ein Semikolon voneinander getrennt.
Beispiel: for.php
Die Schrift eines angezeigten Beispieltextes wird mithilfe einer Schleife schrittweise verkleinert.
 <?php
 for ($groesse = 25; $groesse >= 10; $groesse -= 5) {
echo "<p style='font-size:" . $groesse . "px'>Schriftgröße $groesse px</p>";

}

 ?>
© HERDT-Verlag
51
5
PHP 5.6 - Grundlagen zur Erstellung dynamischer Webseiten

Der Startwert der for-Schleife wird über die Zuweisung
des Wertes 25 an die Variable $groesse festgelegt. Die
Bedingung besagt, dass die Schleife durchlaufen werden
soll, solange der Wert der Variablen $groesse größer
oder gleich 10 ist. Nach jedem Durchlauf wird der Wert um
5 verringert.

Die Variable $groesse steuert über ihren Wert die
Schriftgröße der auszugebenden Zeile und wird darüber
hinaus ausgegeben.

Das Ende der for-Schleife ist erreicht. Der Interpreter weist
der Variablen $groesse einen um 5 kleineren Wert zu und
springt wieder zurück zur Zeile . Dort wird erneut
geprüft, ob die Schleife nochmals durchlaufen werden
Anzeige der Beispieldatei "for.php"
muss.
Beispiele für Operatoren in for-Schleifen
Bei der Arbeit mit einer for-Schleife können Sie z. B. mit folgenden Operationen arbeiten:
Bedingung in der for-Schleife
Werte von $i
for ($i = 1; $i <= 5; $i++)
1, 2, 3, 4, 5
for ($i = 1; $i < 5; $i++)
1, 2, 3, 4
for ($i = 15; $i >= 10; $i--)
15, 14, 13, 12, 11, 10
for ($i = 15; $i > 10; $i--)
15, 14, 13, 12, 11
for ($i = 0; $i < 100; $i = $i + 10)
0, 10, 20, 30, 40, 50, 60, 70, 80, 90
for ($i = 1; $i <= 10; $i = $i + 1.2)
1, 2.2, 3.4, 4.6, 5.8, 7, 8.2, 9.4
5.10
Schleifen abbrechen
Schleifenabbruch mit break
Nicht immer ist es notwendig, eine for-, while- oder do-while-Schleife so lange zu durchlaufen, bis die
definierte Bedingung ein FALSE ergibt und damit die Schleife beendet wird. Auch innerhalb des Schleifendurchlaufs können andere Kriterien geprüft werden, die das weitere Durchlaufen der Schleife überflüssig
machen.
Beispiel: Sie haben eine Array-Variable mit 300 Einträgen (Arrays vgl. Kapitel 6) und suchen darin einen
bestimmten Wert. Dafür definieren Sie eine for-Schleife mit 300 Durchläufen. In jedem Durchlauf wird ein
einzelner Eintrag der Array-Variablen untersucht. Sie finden den Wert bereits beim dritten Durchlauf, trotzdem wird die Untersuchung 300-Mal durchgeführt, bis die Bedingung der for-Schleife diese beendet. Hier ist
es sinnvoll, aus der Schleife auszusteigen, um damit Rechenzeit des Skripts zu sparen. Dies ist mit der
Anweisung break möglich.
52
© HERDT-Verlag
5
Kontrollstrukturen
Beispiel: break.php
 <?php
$budget = 50;

$einzelpreis = 9;

$menge = 1;

while
($menge <= 15) { // Idealfall: 15 Stück kaufen

$gesamtpreis = $einzelpreis * $menge;

if ($gesamtpreis > $budget) { // Budget erschöpft? Wenn ja: Abbruch

echo "<p><strong>Ihr Budget ist leider erschöpft.</strong></p>";

break;

}

echo "<p>$menge Stück: $gesamtpreis Euro.</p>";

$menge++;

}

?>

Der Startwert der while-Schleife wird über die Zuweisung
des Wertes 1 an die Variable $menge festgelegt. 
Die Bedingung besagt, dass die Schleife durchlaufen
werden soll, solange der Wert der Variablen $menge kleiner
oder gleich 15 ist.
 Die Schleife soll allerdings nur ausgeführt werden, bis der
Gesamtpreis das zur Verfügung stehende Budget
übersteigt. Wenn das passiert, wird die Schleife durch den
Befehl break  im Anschluss an eine Meldung
abgebrochen.
Die Variable $menge wird bei jedem Schleifendurchlauf um
eins erhöht ($menge++).

Anzeige der Beispieldatei "break.php"
Vorzeitiger Sprung zum nächsten Schleifendurchlauf mit continue
In Schleifen wird der PHP-Code vom Schleifenkopf bis zum Schleifenende vollständig durchlaufen. Es ist jedoch
denkbar, dass bei einer bestimmten Bedingung das Ausführen des Codes bis zum Schleifenende überflüssig ist,
allerdings sollen weitere Schleifendurchläufe ausgeführt werden.
Für diesen Fall steht das Schlüsselwort continue zur Verfügung. Damit beenden Sie einen einzelnen Schleifendurchlauf, die Schleife wird mit dem nächsten Schleifendurchlauf fortgesetzt. Bei for-Schleifen wird hier
auch die Anweisung der Reinitialisierung ausgeführt, auch wenn das Ende der Schleife noch nicht
erreicht wurde.
Beispiel: continue.php
 <?php
$zaehler = 5;

for ($nenner = -2; $nenner <= 2; $nenner++) {

if ($nenner == 0) {

echo "<p>Division durch 0 ist verboten.</p>";

continue;

}
$ergebnis = $zaehler / $nenner;
echo
"<p>$zaehler / $nenner = " . $ergebnis . "</p>";

}
?>
© HERDT-Verlag
53
5
PHP 5.6 - Grundlagen zur Erstellung dynamischer Webseiten

In einer for-Schleife sollen die Ergebnisse einer Division
von $zaehler und $nenner berechnet und ausgegeben
werden. $zaehler besitzt mit 5 einen festen Wert. Der
Wert der Variablen $nenner wird durch die for-Schleife
verändert (von -2 bis 2).

Um keinen schwerwiegenden Fehler (Division durch 0)
auszulösen, soll die Division nicht durchgeführt werden,
wenn die Variable $nenner den Wert 0 aufweist. In dem
Fall wird der aktuelle Schleifendurchlauf nach einer
echo-Anweisung per continue  beendet. Beachten
Sie, dass die Reinitialisierung $nenner++ auch
ausgeführt wird, wenn das Schleifenende noch nicht
erreicht ist. Die Variable $nenner wird um 1 hochgezählt
und die Schleife mit diesem Wert fortgesetzt.

Sofern der aktuelle Schleifendurchlauf nicht
abgebrochen wurde, erfolgt an dieser Stelle die Berechnung und anschließend die Ausgabe des Ergebnisses.
5.11
Anzeige der Beispieldatei "continue.php"
Übung
Kontrollstrukturen in PHP: switch
Übungsdatei: --

Ergebnisdatei: bewertung_switch.php
Erstellen Sie ein Programm (bewertung_switch.php), das die Bewertung eines Tests in
Textform ausgibt. Realisieren Sie diese Aufgabe mithilfe einer switch-Auswahlschleife.
Legen Sie die erreichte Punktzahl innerhalb des Skripts fest. Die Bedeutung der Punkte
lautet:
10 Punkte: Sehr gut
9 Punkte: Gut
8 Punkte: Befriedigend
7 Punkte:
weniger als 7:
Ausreichend
Leider zu wenige
Punkte erreicht
Kontrollstrukturen in PHP: for
Übungsdatei: --

54
Ergebnisdatei: bewertung_switch-2.php
Erweitern Sie das Programm bewertung_switch.php, indem Sie eine Schleife programmieren,
die automatisch die Bewertung des Tests mithilfe einer for-Schleife für erreichte Punktzahlen von 10 bis 0 Punkte ausgibt. Speichern Sie die Datei unter dem Namen
bewertung_switch-2.php.
© HERDT-Verlag
5
Kontrollstrukturen
Anzeige der Ergebnisdatei "bewertung_switch-2.php"
Kontrollstrukturen in PHP: while und do-while
Übungsdatei: --

Ergebnisdatei: while_do-while.php
Entwerfen Sie ein Programm (while_do-while.php), das untereinander die Zahlen 1 - 5
ausgibt. Weisen Sie einer Variablen $zahl den Startwert 1 zu und verwenden Sie eine
while-Schleife. Realisieren Sie die Aufgabe anschließend zusätzlich in derselben Datei mit
einer do-while-Schleife.
Wenn Sie die Ausgaben von 1 - 5 realisiert haben, weisen Sie der Variablen $zahl den
Startwert 20 zu. Vergleichen Sie das Verhalten der while-Schleife mit dem der do-whileSchleife.
Anzeige der Ergebnisdatei "while_do-while.php" mit Startwert 1 (links) und Startwert 20 (rechts) für die
Variable $zahl
© HERDT-Verlag
55
Herunterladen