SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=133&group=25&page=2
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


for-schleife


Die for-Anweisung ist für Schleifen oft praktischer als die while-Anweisung. Hier wird ausgenutzt, dass die meisten Schleifen einem bestimmten Schema folgen. Normalerweise gibt es eine Schleifenvariable, die vor Beginn der Schleife initialisiert wird. Vor jedem Schleifendurchlauf wird der Wert dieser Variablen innerhalb des Ausdrucks überprüft. Schließlich wird sie am Ende der Schleife, unmittelbar vor der erneuten Auswertung des Ausdrucks, inkrementiert oder in anderer Weise geändert. Sie hat außerdem den Vorzug, dass die Initialisierung, der Ausdruck (Bedingung) und die Veränderung der Schleifenvariablen übersichtlich im Kopf der Schleife zusammengefasst sind.


Definition

for (Init Schleifenvariable; Bedingung; Veränderung) {
  Anweisung/en;
}



Bild 3.8: Ablaufschema einer for-Schleife

Am einfachsten lässt sich erklären, was die for-Anweisung bewirkt, wenn man die äquivalente while-Anweisung angibt:

// Laufvariable (Zählvariable)
$i = 0;

// while-Anweisung
// Ausgabe: 0 1 2 3 4 5 6 7 8 9
while ($i < 10) { // Bedingung
  echo "$i<br>"; // Anweisungsblock
  $i++; // Inkrementierung der Laufvariablen
}

// for-Anweisung
// Im Ausgabefenster: 0 1 2 3 4 5 6 7 8 9
for ($i=0;$i<10;$i++) {
  echo "$i<br>"; // Anweisungsblock
}

// Schreibweise (Variante 2)
for ($i=0;$i<10;$i++)
  echo "$i<br>"; // Anweisung

Wie Sie hier lesen, stehen in dieser Schreibweise alle wichtigen Informationen über die Schleifenvariable in einer einzigen Codezeile. Damit ist die Arbeitsweise der Schleife klar ersichtlich. Außerdem wird dadurch, dass die Veränderung der Schleifenvariablen innerhalb der eigentlichen for-Anweisung steht, der Anweisungsblock vereinfacht.


Flexibilität der for-Schleife

Alle drei Parameter der for-Schleife sind äußerst flexibel einsetzbar. So sind die drei Parameter der for-Schleife optional. Ohne eine Iterationsvariable wird die Schleife endlos durchlaufen. Sie können in diesem Fall wieder auf break zurückgreifen, um die Schleife mit einer zusätzlichen Bedingung zu verlassen.

Beispiel

<?php
$zaehler = 1;
for (;;) {
  if ($zaehler > 10) {
    break;
  }
  print $zaehler;
  $zaehler++;
}
?>
{PSP}
Hinweis: continue kann ebenfalls zum Einsatz kommen.

Der flexible Umgang mit den Schleifenparametern kennt praktisch keine Grenzen. Auch das folgende Beispiel ist syntaktisch korrekt:

<?php
for ($i = 0, $j = 10;$i<$j;$i++) {
  $j--;
  echo "i ist jetzt: $i<br>";
  echo "j ist jetzt: $j<br>";
}
?>

Ausgabe
i ist jetzt: 0
j ist jetzt: 9
i ist jetzt: 1
j ist jetzt: 8
i ist jetzt: 2
j ist jetzt: 7
i ist jetzt: 3
j ist jetzt: 6
i ist jetzt: 4
j ist jetzt: 5

Es spielt offensichtlich keine Rolle, ob hier Variablen zum Einsatz kommen oder nicht. Wenn Sie beispielsweise lediglich eine Liste ausgeben wollen, können Sie den Befehl recht knapp halten:

<?php
for ($i = 1; $i <= 10; print $i, $i++) ;
?>

Innerhalb des for-Befehls können also weitere Befehle, durch Kommata getrennt, eingesetzt werden. Im Beispiel wird übrigens nicht zufällig der Befehl print anstatt des flexibleren echo verwendet. Wie bei der Befehlsbeschreibung bereits erläutert, gibt echo nichts zurück, während print die Ausführung im Erfolgsfall mit TRUE quittiert. Normalerweise wird der Rückgabewert nicht benötigt und gelöscht. Die for-Schleife erwartet jedoch von jedem direkt eingegebenen Wert, dass er sich als Ausdruck verhält – Ausdrücke geben immer etwas zurück. An dieser Stelle kann echo also nicht funktionieren. Versuchen Sie es dennoch, erhalten Sie einen Laufzeitfehler.


Alternative Syntax

Natürlich, wie kann es anders sein, gibt es auch für die for-Schleife eine alternative Schreibweise.


Definition

for (Init Schleifenvariable; Bedingung; Veränderung):
  Anweisungen/en;
endfor;

Beispiel – alternative Schreibweise

<? for ($i = 0; $i <= 10; $i++): ?>
i ist jetzt: <? echo $i ?><br>
<? endfor; ?>

Ausgabe
i ist jetzt: 0
i ist jetzt: 1
i ist jetzt: 2
i ist jetzt: 3
i ist jetzt: 4
i ist jetzt: 5
i ist jetzt: 6
i ist jetzt: 7
i ist jetzt: 8
i ist jetzt: 9
i ist jetzt: 10