PHP/Tutorials/Einstieg/Kontrollstrukturen
Inhaltsverzeichnis
Verzweigungen
Wie in vielen anderen Programmiersprachen auch bietet PHP Sprachelemente, sogenannte Kontrollstrukturen, um Verzweigungen zu realisieren. Dazu zählen die einfache Verzweigung mit if
und die mehrfache Verzweigung mit switch
.
Einfachverzweigung mit if
/else
Mit der sogenannten if-Anweisung (if, engl. für „falls“) kann man eine Bedingung prüfen. Das Sprachkonstrukt (es ist keine Funktion) wird mit dem Schlüsselwort if
notiert, gefolgt von einem Paar runder Klammern, in dem eine Bedingung notiert wird. Diese Bedingung wird nach dem "Falls-Dann-Prinzip" geprüft. Falls sie zutrifft, dann soll etwas bestimmtes passieren. Dies ist ein Anweisungsblock, der innerhalb von geschweiften Klammern notiert und zur besseren Lesbarkeit eingerückt wird.
Für den Fall, dass die Bedingung nicht erfüllt ist, kann man einen Alternativzweig mit dem Schlüsselwort else
(else, engl. für „ansonsten“) festlegen.
$haben = 10;
$limit = 20;
if($haben > $limit) {
// gibt Ergebnis aus
print "Einkaufen gehen";
}
else {
print "Nicht einkaufen gehen";
}
In diesem Beispiel haben wir zwei Variablen, eine mit dem Wert 10
und eine mit 20
. Die If-Anweisung überprüft ob $haben
größer $limit
ist. Ist das der Fall dann schreibt PHP »Einkaufen gehen«. Um jetzt keine zweite If-Anweisung schreiben zu müssen, die den gegenteiligen Fall abdeckt, gibt es die else-Anweisung. Wenn also $haben
kleiner oder gleich $limit
ist dann schreibt PHP »Nicht einkaufen gehen«.
In unserem Beispiel also: Wenn $haben
größer als $limit
dann schreibe »Einkaufen gehen« ansonsten schreibe »Nicht einkaufen gehen«.
print
-Funktion herum, sollten Sie bei Verzweigungen immer notieren, auch wenn sie bei nur einer einzelnen Anweisung prinzipiell entfallen könnten. Es hat sich in der Praxis aber als hilfreich erwiesen, wenn Sie diese grundsätzlich notieren, da in diesem Fall eine spätere Erweiterung keine unerwarteten Programmverläufe produziert.Experiment: Passwort prüfen
Wir legen zwei neue Dateien an, eingabe.html und ausgabe.php:
<form action="ausgabe.php" method="post">
<label>Passwort: <input type="password" name="pw"></label>
<button>Senden</button>
</form>
Wir erstellen ein neues Formular, welches eingegebene Daten an ausgabe.php
versenden wird. In das Passwortfeld müssen wir später unser Passwort eintragen und mit dem Button das Formular abschicken.
if ($_POST["pw"] == "test") {
print "Herzlich Willkommen im geschützten Bereich";
}
else {
print "Falsches Passwort";
}
Per if-Anweisung überprüfen wir, ob das eingegebene Passwort dem Wert »test« entspricht, wenn ja, dann hat man Zutritt zum geschützten Bereich, ansonsten nicht.
Mehrfachverzweigung mit switch
Mit der Switch-Anweisung lassen sich quasi mehrere If-Abfragen bündeln, wenn man eine Variable auf unterschiedliche Inhalte abfragen möchte.
$a = 30;
$b = 12;
$op = "-";
switch ($op){
case "+":
echo "$a plus $b ergibt: ", $a + $b;
break;
case "-":
echo "$a minus $b ergibt: ", $a - $b;
break;
case "*":
case "x":
echo "$a mal $b ergibt: ", $a * $b;
break;
case "/":
case ":":
echo "$a durch $b ergibt: ", $a / $b;
break;
default:
echo "Das Rechenzeichen '$op' ist mir unbekannt.";
}
Mit dem Schlüsselwort switch
wird die Struktur eingeleitet. In runden Klammern wird ein Ausdruck notiert (hier eine Variable), der zu prüfen ist.
Die einzelnen Fallunterscheidungen werden mit der Kombination aus case
und break
notiert. Nach dem Schlüsselwort case
steht ein Wert, gefolgt von einem Doppelpunkt. Danach folgen beliebig viele Anweisungen, die für diesen Fall gelten. Mit dem Schlüsselwort break
(unbedingt mit abschließendem Semikolon!) wird der jeweilige Fall abgeschlossen.
Das Schlüsselwort default
(default, engl. Vorgabe) ist für alle die Fälle gemeint, die keinem der notierten Fälle entsprechen, weshalb hier kein Wert vor dem Doppelpunkt notiert wird. In diesem Code-Beispiel steht es an letzter Stelle, weshalb auf das abschließende break
verzichtet werden kann.
Folgt einem case
kein break
, so werden alle nachfolgenden Anweisungen der folgend notierten Fälle abgearbeitet, bis wieder ein break
steht. Damit kann man Anweisungen zusammenfassen:
$note = 1;
echo "Sie haben eine ";
switch ($note){
case 1:
echo "sehr ";
case 2:
echo "gute ";
default:
echo "Note ";
}
echo $note," bekommen.";
// Ergebnisse
// $note = 1: "Sie haben eine sehr gute Note 1 bekommen."
// $note = 2: "Sie haben eine gute Note 2 bekommen."
// $note = 3: "Sie haben eine Note 3 bekommen."
Das Fehlen von break
nach jedem case
führt dazu, dass alle folgenden echo
-Anweisungen ausgeführt werden.
Schleifen
Mit Schleifen lassen sich Programmblöcke beliebig oft wiederholen.
For-Schleife
Die For-Schleife wird verwendet, wenn eine bestimmte Anzahl an Durchläufen benötigt wird.
for($a = 10; $a < 20; $a++) {
echo $a;
}
Als erstes wird mit $a = 10
der Schleifenvariable a
ein Startwert, zehn, gegeben. Als zweites wird mit $a < 20
festgelegt, unter welcher Bedingung die Schleife fortgeführt werden soll. In unserem Fall solange, bis die Schleifenvariable den Wert 20 erreicht. Als drittes wird mit $a++
, angegeben, was bei jedem Durchlauf der Schleife verändert wird, hier wird bei jedem Durchlauf der Wert der Schleifenvariable um eins erhöht.
Häufig werden für solche Schleifenvariablen (Zähler) die Variablen i
(wie index) oder k
verwendet.
For-Each-Schleife
Sie wird verwendet, wenn alle Elemente eines Arrays behandelt werden sollen.
$einArray = array(1, 2, 3, 4);
foreach ($einArray as $Wert) {
echo $Wert;
}
In PHP gibt es sogenannte "assoziative Arrays", also Arrays, deren Elemente nicht schlicht nummeriert sind, sondern anstelle der Nummer einen Namen tragen. Egal ob Name oder Nummer, man spricht von Schlüsseln:
$einArray = array(
'eins' => 1,
'zwei' => 'Hallo Welt!',
3 => 'drei',
'fier' => 'vier'
);
foreach ($einArray as $key => $value) {
printf(
'Schlüssel: "%s" - Wert: "%s"'.PHP_EOL,
$key,
$value
);
}
Die Ausgabe sollte so aussehen:
Schlüssel: "eins" - Wert: "1" Schlüssel: "zwei" - Wert: "Hallo Welt!" Schlüssel: "3" - Wert: "drei" Schlüssel: "fier" - Wert: "vier"
While-Schleife
Schleifen, die eine Abbruchbedingung prüfen, nennt man While-Schleifen. While heißt "Solange", d. h. die Schleife wird solange wiederholt, wie die Bedingung "wahr" ist.
while (true) {
echo "1";
}
Hier haben wir eine Endlosschleife, die solange eine Eins ausgibt, wie das Universum existiert.
Diese normale While-Schleife ist eine sogenannte kopfgesteuerte Schleife, sie prüft die Bedingung, bevor sie überhaupt in den Schleifenkörper hineingeht. Dagegen führt die Do-While-Schleife den Schleifenkörper mindestens einmal aus, bevor die Bedingung geprüft wird.
do {
echo "1";
}
while (false);
Hier wird nur einmal eine Eins ausgegeben.
Fehlerquelle: Endlosschleife
$count = 1;
while($count < 4)
{
echo 'Blabla';
}
Die Abbruchbedingung (Variable count >= 4) kann niemals erreicht werden, deshalb läuft die Schleife also endlos, bis irgendein Timeout greift.
Weblinks
PHP-Handbuch