Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
PHP Lektion 4
Schleifen
Verschiedene Vorgänge benötigen mehrere Durchgänge, bis ein bestimmter Zustand erreicht ist.
while-Schleifen
Zum Beispiel kann man, um die Zahlen 1 bis 10 auszugeben folgenden PHP-Code verwenden:
<?php echo "1 <br />"; echo "2 <br />"; echo "3 <br />"; echo "4 <br />"; echo "5 <br />"; echo "6 <br />"; echo "7 <br />"; echo "8 <br />"; echo "9 <br />"; echo "10 <br />"; ?>
Der verwendete Befehl ist stets derselbe (echo
), nur das Argument ändert sich bei jedem Aufruf (Die Zahl ist eins größer als zuvor). Diesen Effekt kann man mit einer while-Schleife erreichen:
<?php $i = 1; while ($i <= 10) { echo $i . "<br />"; // es wird $i ausgegeben, $i++; // Wert wird um 1 erhöht } ?>
Dabei werden alle Befehle im Schleifenblock (innerhalb der geschweiften Klammern) solange wiederholt, wie die Bedingung im Argument ($i < = 10) wahr ist. Das Beisplie zeigt eine kopfgesteuerte while-Schleife.
$i++
ist der sogenannte Inkrement Operator, er erhöht die Variable $i
um eins. Alternativ und länger könnte man $i=$i+1;
schreiben.
Erstelle eine Seite mit Formular und ein php-Skript, mit der man durch Eingabe einer Zahl bestimmen kann, bis zu welcher Zahl das Skript „zählt“.
Fußgesteuerte while-Schleife
Manchmal möchte man erreichen, dass der Schleifenblock mindestens einmal durchlaufen wird, sogar dann, wenn die Bedingung von Beginn an nicht erfüllt ist. Dies kann man mit einer fußgesteuerten while-Schleife erreichen:
<?php $i = 11; do { echo $i . "<br />"; // es wird $i ausgegeben, $i++; // Wert wird um 1 erhöht } while ($i <= 10); ?>
Hier wird die Bedingung am Ende überprüft, der Schleifenblock läuft mindestens einmal durch.
Ändere dein Skript von oben so ab, dass es eine fußgesteuerte Schleife verwendet.
Continue und Break
Der Verlauf einer Schleife kann neben der Schleifenbedingung noch anders gesteuert werden. Für Schleifen gibt es jedoch noch die speziellen Ausdrücke continue und break.
break - beendet an der aktuellen Stelle die Schleife und führt dann den folgenden PHP-Code aus, so als würde die Schleifenbedingung false ergeben (selbst wenn dies nicht der Fall wäre).
<?php while (...) { break; // ---> // | // V } // <--- ?>
continue - überspringt den aktuellen Schleifendurchlauf und beginnt mit dem nächsten. Er springt dabei zum Ende des Schleifenrumpfs. Für For-Schleifen bedeutet dies auch, dass die Durchlaufanweisung ausgeführt wird (für den nächsten Durchlauf), für Do-While-Schleifen bedeutet dies, dass die Schleifenbedingung geprüft wird (und auch für While-Schleifen, aber da erst im Beginn des darauf folgenden Schleifendurchlaufs).
<?php // keine Endlosschleife wie vielleicht vermutet do { // < - - - // | Nicht wie erwartet // | continue; // ---> - - // | // V Dies ist der Weg von continue // <--- } while(false); ?>
Eine if-Abfrage kann auf diese Weise nicht verlassen (oder sogar neu durchlaufen) werden da eine if-Abfrage kein Schleifenkonstrukt ist. Sowas wie if (…) { …. break; …} wird nur klappen wenn das ganze in einer Schleife steht und somit das break auf die Schleife angewendet werden kann.
Bearbeite das folgende Beispiel und wende es in deinem variablen Zähler an.
<?php $i = 11; do { if ( $i > 10 ) { echo "i ist bereits größer als 10"; break; } echo $i . "<br />"; // es wird $i ausgegeben, $i++; // Wert wird um 1 erhöht } while ($i <= 10); ?>
for-Schleifen
Eine for-Schleife kann man immer dann einsetzen, wenn man zuvor bereits weiß, wie oft ein Vorgang wiederholt werden soll:
<?php
for ($i = 1; $i <= 10; $i++) { echo $i . "<br />"; }
For-Schleifen kommen seltener zum Einsatz, da Sie unflexibler sind als while-Schleifen.
Schreibe dein Skript als for-Schleife. Ändere das Programm so, dass die Schleife unabhängig von der Formulareingabe bei 100 verlassen (break) wird und die Zahlen von 31 bis 40 überspringt (continue).