Anzeige
Tutorialbeschreibung

PHP - Teil 11 - while()- und do-while()-Schleifen

PHP - Teil 11 - while()- und do-while()-Schleifen

Schleifen gehören zu den wichtigsten Elementen von Programmiersprachen. Denn erst mittels Schleifen lassen sich Anweisungsblöcke mehrmals durchlaufen. In PHP könnt ihr zwischen vier verschiedenen Schleifenvarianten wählen.

while
do-while
for
foreach

Drei der vier Varianten werden euch in diesem und dem nächsten Tutorial vorgestellt. Die foreach-Schleife verdient dann noch einmal gesonderte Betrachtung, da diese speziell für den Einsatz in Arrays entwickelt wurde.


while-Schleife

Bei while handelt es sich um den einfachsten Schleifentyp, der aber gleichzeitig auch am häufigsten eingesetzt wird. Das gilt übrigens nicht nur für PHP. Tatsächlich gibt es die while-Schleife in fast jeder Programmiersprache.

Die allgemeine Syntax einer solchen Schleife sieht folgendermaßen aus:
while (bedingung)
      anweisung

Wie bei einer if-Abfrage wird eine Bedingung definiert, die als Voraussetzung für die Schleife gilt. Als Bedingung ist jeder Ausdruck zulässig, der einen der beiden Werte true oder false zurückliefert. Die Anweisung wird so oft wiederholt, solange die Bedingung zutrifft. Die Bedingung wird jedes Mal am Anfang der Schleife überprüft. Dadurch wird das Ausführen der untergeordneten Anweisungen auch dann nicht angehalten, wenn sich der Wahrheitsgehalt der Bedingung zwischenzeitlich ändert. Ergibt der Ausdruck bereits beim Eintritt in die Schleife false wird die Schleife überhaupt nicht durchlaufen.

Ein erstes Beispiel:
<?php 
$num = 1; 
while ( $num <=10 ) { 
echo $num . " <br />"; 
$num++; 
} 
?> 

 
Hier wird als Bedingung angegeben, dass der Wert von $id kleiner oder gleich 10 sein muss. Bei jedem Schleifendurchlauf wird der Wert von $i um eins erhöht. Dieser Wert wird mittels echo ins Dokument geschrieben.

Bilder



 
Im aktuellen Beispiel bricht die Schleife ab, wenn $i größer als 10 ist. Genau diese Abbruchbedingung ist es, die Probleme bereiten kann. Denn schneller, als man es sich versieht, hat man eine Endlosschleife programmiert. Und solche Schleifen können das System zum Absturz bringen. Zwar lassen sich Endlosschleifen immer durch kill beenden, das kann aber auf Dauer nicht die Lösung sein. Um das Problem mit Endlosschleifen zu vermeiden, könnt ihr einen expliziten Notausstieg in die Schleife einbauen. Realisiert wird das über das Schlüsselwort break. Dieses break beendet die Schleife an der aktuellen Position. Der nachfolgende PHP-Code wird dann exakt so ausgeführt, als ob die Schleifenbedingung den Wert false zurückliefert. Das gilt auch dann, wenn der Rückgabewert der Bedingung in Wahrheit true ist.

Die allgemeine Syntax von break sieht folgendermaßen aus:
 <?php

  while (...) {
      break; // --->
             //     |
             //     V
  }          // <---
  ?>

Gerade dann, wenn ihr noch nicht so viel Erfahrung mit der Programmierung von Schleifen habt, solltet ihr bewusst auf break setzen. Denn so lassen sich Endlosschleifen effektiv vermeiden. Im nächsten Tutorial geht es um den Schleifentyp for. In diesem Zusammenhang wird dann noch eine alternative Abbruchmethode – nämlich die Funktion die() und deren Pendant exit() – vorgestellt.

Im folgenden Beispiel wird festgelegt, dass die Schleife so lange laufen soll, wie der Wert von $i kleiner als zehn ist. Normalerweise würde die Schleife dann also die Zahlen 0 bis 9 ausgeben. Allerdings weist die Syntax eine Besonderheit auf. Und zwar kommt hier break zum Einsatz.
<?php 
$num=1; 
while ( $num <10 ) { 
echo $num . " <br />"; 
if ($num==5) {break;}
$num++; 
} 
?> 

 
Dieses beak sorgt dafür, dass die Schleife abgebrochen wird, wenn $i den Wert 5 besitzt. Die Ausgabe im Browser sieht dann folgendermaßen aus:

Bilder



 
Zusätzlich zu break gibt es auch noch das Schlüsselwort continue. Auch damit lassen sich Schleifen beeinflussen. Durch den Einsatz von continue lässt sich der Rest des Schleifendurchlaufs abbrechen und mit der nächsten Bedingung fortfahren, um so den nächsten Schleifendurchlauf zu starten. continue kann man optional einen numerischen Parameter übergeben, durch den angegeben wird, wie viele Ebenen umschließender Schleifen bis zu ihrem Ende tatsächlich übersprungen werden sollen.

Das folgende Beispiel zeigt eine einfache Anwendung von continue.
<?php 
$a=0;
$b=0;
while($a<100){
   $a++;
   if($b==50){
      continue;
   }
  $b++;
}
 echo $a, "<br />", $b;
?>

Hier werden im Browser Zahlenwerte ausgegeben. Erreicht $a den Wert 100, wird die nächste Anweisung $b++ (also das Hochzählen) nicht mehr ausgeführt. Die Anweisung $a++ wird jedoch weiter ausgeführt, da diese vor continue steht. Dies liegt daran, dass die Schleife durch den Einsatz von continue eben nicht abgebrochen wird.

 
Die Ausgabe im Browser sieht folgendermaßen aus:

Bilder



 
Vorsicht ist im Zusammenhang mit continue hinsichtlich des Semikolons geboten. Dieses sollte in keinem Fall weggelassen werden, da dies zu unerwarteten Ergebnissen führen kann. Wie sich ein Weglassen des Semikolons auswirkt, zeigt das folgende Beispiel:
<?php
for ($i =  0; $i < 5; ++$i) {
    if ($i == 2)
      continue
      print "$in";
}
?>

Die erwartete Ausgabe sähe folgendermaßen aus:

0
1
2
3
4


Das ist allerdings nicht so. Sieht man sich nämlich die Ausgabe im Browser an, ergibt sich folgendes Bild:

Bilder



 
Der Rückgabewert des print()-Aufrufs ist in diesem Fall int(1). continue nimmt daher an, dass es sich dabei um den optionalen Parameter handelt.

Neben der gezeigten Syntax gibt es noch eine andere Variante, die ihr in dieser Form auch im Zusammenhang mit if-Abfragen kennengelernt habt.
while  (bedingung):
    anweisung
    ...<
endwhile;

Ein Beispiel hierzu:
<?php 
$num = 1; 
while ( $num <=10 ): 
echo $num . " <br />"; 
$num++; 
endwhile;
?> 


do-while-Schleife

do-while-Schleifen ähneln while-Schleifen. Auch diese besitzen einen zu prüfenden Ausdruck. Allerdings befindet sich dieser immer am Ende der Schleife. Die allgemeine Syntax von do-while-Schleifen sieht folgendermaßen aus:
do {
   Anweisung
} while(Bedingung)

Für die do-while-Schleife gibt es lediglich eine Syntax. Eine alternative Variante wie bei while-Schleifen existiert hier also nicht.

Das folgende Beispiel zeigt, wie sich do-while-Schleifen üblicherweise verwenden lassen:
<?php
  $num = 0;
  do {
    echo "Ziffer: " , $num , "<br />";
    $num++;
  } while ($num < 5);
?>

 
Im Browser ergibt sich folgendes Bild:

Bilder



Fazit

Zwei Schleifenvarianten habt ihr kennengelernt. Das nächste Tutorial widmet sich dann den deutlich komplexeren for-Schleifen, einem weiteren unverzichtbaren Programmiermittel.

Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von franzg
  • 14.05.2017 - 18:11

Danke für das ausfürliche Tutorial!

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 07.10.2016 - 13:14

Vielen Dank, tolles Video.

Portrait von dmtw2107
  • 16.11.2013 - 09:36

verständlich und toll erklärt danke für das tutorial

Portrait von bzloeffler
  • 05.07.2011 - 10:34

Kleiner Fehler

Zitat:

Ein erstes Beispiel:
";
$num++;
}
?

Hier wird als Bedingung angegeben, dass der Wert von $id kleiner oder
gleich 10 sein muss. Bei jedem Schleifendurchlauf wird der Wert von $i

$id ist $num und $i sollte $num++ sein

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 04.07.2011 - 14:18

Sehr geehrter Herr Koch,

Ihre PHP-Turtorials sind klasse: gut erklärt und leicht nachvollziehbar. Danke dafür.

Ich bin Neueinsteiger in PHP und würde Sie bitten wollen, in die restlichen Tutorials einzufügen, wofür ich PHP in einer normalen Website, ohne z. B. Mitgliederverwaltung nutzen kann.

Vielen Dank!

Portrait von Daniel Koch
  • 06.07.2011 - 14:40

Hallo,
auf folgender Seite werden die möglichen Einsatzgebiete von PHP recht gut beschrieben:

http://www-lehre.informatik.uni-osnabrueck.de/wp/2003/nr12b/node16.html

Viele Grüße
Daniel

Portrait von polyfeux
  • 03.07.2011 - 11:15

Schönes Tutorial!
Ein kleiner Vorschlag zu den Code-Beispielen:
Im ersten Code-Beispiel (allg. Aufbau der while-Schleife) würde ich das Wort 'anweisung' noch in geschweifte Klammern setzen (beim allg. Aufbau der do-while-Schleife hast Du das schon gemacht).
Und das Wort 'code' am Anfang von jedem Code-Beispiel irritiert etwas - denn durch das Synthax-Highlighting wird ja schon deutlich, dass es sich um Code handelt; das Wort 'code' ist somit praktisch überflüssig.

Portrait von Daniel Koch
  • 04.07.2011 - 14:46

Das mit dem Word "code" wird automatisch eingefügt, das lässt sich leider von mir bzw. auch den anderen Autorinnen und Autoren nicht ändern.

Viele Grüße
Daniel

x
×
×