6 Schleifen

  • Auch Schleifen gehören zu Kontrollstrukturen einer Programmiersprache, PHP bietet wie die meisten Programmiersprachen drei verschiedene Schleifen an. Und obwohl alle drei Schleifen ähnliche Aufgaben wiederholt ausführen sollen, gibt es gewisse Unterschiede, die die einzelnen Schleifen im Besonderen auszeichnen. (beispiel_10.php) 01: <?php 02: <#$>i = 1; 03: while(<#$>i <= 10) 04: { 05: echo <#$>i++; 06: if(<#$>i <= 10) echo ", "; 07: } 08: ?> In Beispiel 10 haben wir zunächst die einfache While-Schleife. In Zeile 2 wird die Variable "<#$>i" auf den Wert "1" gesetzt. Die folgende Schleife von Zeile 3 bis 7 hat die Aufgabe die Zahlenfolge 1, 2, 3, ..., 10 auszugeben. Die Eintrittsbedingung der Schleife steht in Klammern gleich hinter "while" und lässt sich folgendermaßen übersetzen: Solange "<#$>i" kleiner oder gleich "10" ist, wiederhole folgendes. Was die Schleife wiederholt ausführen soll, steht als Block in gescheiften Klammern. In unserem Beispiel wird "<#$>i" ausgegeben und nachfolgend um eins erhöht, letzteres wird durch "$i++" bewerkstelligt (Zeile 5). Dann kommt noch eine Verzweigung, die die Kommata zwischen den Zahlen setzt, aber verhindert, dass dies auch nach der letzten ausgegebenen Zahl geschieht. "<#$>i" wird also bei jedem Schleifendurchlauf um eins erhöht bis "<#$>i" den Wert "11" trägt, dann wird die Schleife nicht noch einmal durchlaufenm, denn die Bedingung ergibt false. (beispiel_11.php) 01: <?php 02: <#$>i = 1; 03: do 04: { 05: echo <#$>i++; 06: if(<#$>i <= 10) echo ", "; 07: } 08: while(<#$>i <= 10) 09: ?> Die Do-While-Schleife bringt uns das Beispiel 11 näher. Der Unterschied zur vorherigen Schleife ist, dass die Bedingung anstatt am Anfang nun am Ende steht. Ich möchte darauf hinweisen, dass eine Schleife solange durchlaufen wird, wie die Bedingung wahr (true) zurückgibt. Sie sollten zudem beim Programmieren unbedingt darauf achten keine Endlosschleifen zu schaffen, bei der also die Bedingung niemals falsch (false) ergibt und somit das Programm oder PHP-Skript ohne Eingriff des Benutzers nie beendet werden kann. In unserem Beispiel etwa bräuchten Sie für eine Endlosschleife nur "<#$>i--" anstatt "<#$>i++" einzugeben: "<#$>i" wird dann nicht mehr um eins erhöht sondern dekremeniert. Die Schleifenbedingung gibt immer true zurück. Das Beispiel 11 erledigt die selbe Aufgabe wie Beispiel 10 und doch gibt es einen entscheidenen Unterschied wenn wir in beiden Beispielen in Zeile 2 der Variable "<#$>i" den Wert "100" zuweisen. Bei Beispiel 10 wird nichts ausgegeben, die Schleife aus dem Beispiel 11 wird jedoch einmal durchlaufen und 100 ausgegeben. Die Do-While-Schleife wird also auf jeden Fall einmal durchlaufen, denn hier steht die Bedingung am Ende und diese wird auch erst nach dem ersten Schleifendurchlauf auf ihr Ergebnis hin überprüft. (beispiel_12.php) 01: <?php 02: for(<#$>i = 1; <#$>i < 11; <#$>i++) 03: { 04: echo <#$>i; 05: if(<#$>i < 10) echo ", "; 06: } 07: ?> Die dritte Schleife im Bunde ist auch die komplizierteste. Bei der For-Schleife in Beispiel 12 lässt sich genau bestimmen wie oft sie durchlaufen werden soll, da sie ihren eigenen Zähler mit sich führt. Zunächst wird der For-Schleife ein Startwert übergeben, in diesem Fall ist es "<#$>i = 1". Durch jeweils einem Strichpunkt getrennt folgen die Schleifenbedingung ("<#$>i < 11") und eine Anweisung die nach jedem Schleifendurchlauf ausgeführt werden soll (<#$>i++). Beim ersten Schleifendurchlauf wird also zunächst "<#$>i" auf 1 gesetzt und die Bedingung überprüft. Lautet das Ergebnis dabei true wird der nachstehende Schleifenblock abgearbeitet und am Ende die Variable "<#$>i" um eins erhöht (gemäß "<#$>i++"). Dann geht das Spielchen wieder von vorne los: Das Ergebnis der Bedingung wird ausgewertet, bei true wird der Block der Schleife durchlaufen und am Ende die Anweisung ausgeführt, bei false wird die For-Schleife verlassen. Alle Parameter der For-Schleife (Startwert, Bedingung und Anweisung) sind optional und müssen nicht angegeben werden. Dadurch lässt sich relativ einfach eine Endlosschleife programmieren, die nur durch "break;" beendet werden kann. Beispiel 13 zeigt eine, zugegeben missbrauchte, For-Schleife ohne jegliche Parameter. (beispiel_13.php) 01: <?php 02: $i = 1; 03: for(;;) 04: { 05: if($i == 10) { echo $i; break; } 06: echo $i . ", "; 07: $i++; 08: } 09: ?>