Appearance
Kapitel 6: Ablaufsteuerung
6.1 if / elseif / else
Einfache if-Abfrage
php
<?php
$alter = 20;
// Einfache if-Abfrage
if ($alter >= 18) {
echo "Sie sind volljährig.";
}
// if-else
if ($alter >= 18) {
echo "Sie sind volljährig.";
} else {
echo "Sie sind minderjährig.";
}
// if-elseif-else
$note = 85;
if ($note >= 90) {
echo "Sehr gut";
} elseif ($note >= 75) {
echo "Gut";
} elseif ($note >= 60) {
echo "Befriedigend";
} else {
echo "Nicht bestanden";
}
?>Kurzschreibweise (ohne Geschweifte Klammern)
php
<?php
$ist_eingeloggt = true;
// Wenn nur eine Anweisung: Klammern optional (nicht empfohlen!)
if ($ist_eingeloggt)
echo "Willkommen!";
// ABER: Gefährlich bei mehreren Zeilen!
if ($ist_eingeloggt)
echo "Willkommen!";
echo "Dies wird IMMER ausgeführt!"; // Falsch eingerückt!
// Sicherer: Immer geschweifte Klammern verwenden!
if ($ist_eingeloggt) {
echo "Willkommen!";
echo "Dies wird nur ausgeführt, wenn eingeloggt.";
}
?>Alternativsyntax für HTML-Einbettung
php
<?php
$ist_eingeloggt = true;
$benutzername = "Max";
?>
<!DOCTYPE html>
<html>
<head>
<title>Willkommen</title>
</head>
<body>
<?php if ($ist_eingeloggt): ?>
<h1>Willkommen zurück, <?php echo $benutzername; ?>!</h1>
<p>Sie sind eingeloggt.</p>
<?php else: ?>
<h1>Willkommen Gast!</h1>
<p>Bitte <a href="login.php">loggen Sie sich ein</a>.</p>
<?php endif; ?>
</body>
</html>6.2 switch case
Grundlegende switch-Anweisung
php
<?php
$tag = 3; // 1 = Montag, 2 = Dienstag, etc.
switch ($tag) {
case 1:
echo "Montag";
break;
case 2:
echo "Dienstag";
break;
case 3:
echo "Mittwoch";
break;
case 4:
echo "Donnerstag";
break;
case 5:
echo "Freitag";
break;
case 6:
echo "Samstag";
break;
case 7:
echo "Sonntag";
break;
default:
echo "Ungültiger Tag";
}
?>Wichtiges zum break
php
<?php
$note = "B";
switch ($note) {
case "A":
echo "Sehr gut";
break; // Ohne break: "Durchfallen" (fall-through)
case "B":
echo "Gut";
break;
case "C":
echo "Befriedigend";
break;
default:
echo "Nicht bestanden";
}
// Beispiel für absichtliches Durchfallen
$tag = 3; // Mittwoch
switch ($tag) {
case 1:
case 2:
case 3:
case 4:
case 5:
echo "Arbeitstag";
break;
case 6:
case 7:
echo "Wochenende";
break;
default:
echo "Ungültiger Tag";
}
?>switch vs. if-elseif-else
| Situation | Empfehlung |
|---|---|
| Viele exakte Gleichheitsprüfungen | switch (schneller, lesbarer) |
Bereichsprüfungen (z.B. $note > 90) | if-elseif-else |
| Komplexe Bedingungen | if-elseif-else |
Viele case-Zweige | switch |
6.3 while-Schleife
Grundlegende while-Schleife
php
<?php
// Ausgabe von 1 bis 10
$i = 1;
while ($i <= 10) {
echo $i . " ";
$i++;
}
// Ausgabe: 1 2 3 4 5 6 7 8 9 10
// Achtung: Endlosschleife vermeiden!
// $i = 1;
// while ($i <= 10) {
// echo $i . " ";
// // $i++ fehlt → Endlosschleife!
// }
// while-Schleife mit break abbrechen
$i = 1;
while (true) {
echo $i . " ";
if ($i >= 10) {
break; // Schleife abbrechen
}
$i++;
}
?>Praxisbeispiel: Fakultätsberechnung
php
<?php
$n = 5;
$fakultaet = 1;
$i = 1;
while ($i <= $n) {
$fakultaet *= $i;
$i++;
}
echo "Fakultät von $n = $fakultaet"; // 5! = 120
?>6.4 do-while-Schleife
Unterschied zwischen while und do-while
php
<?php
// while-Schleife: Bedingung wird ZUERST geprüft
$i = 11;
while ($i <= 10) {
echo $i;
$i++;
}
// Ausgabe: (nichts, da Bedingung false)
// do-while-Schleife: Code wird ZUERST ausgeführt, DANN Bedingung geprüft
$j = 11;
do {
echo $j;
$j++;
} while ($j <= 10);
// Ausgabe: 11 (Code wird mindestens einmal ausgeführt)
?>Praxisbeispiel: Benutzereingabe validieren
php
<?php
// Simuliere Benutzereingabe
$eingabe = "";
do {
// In echter Anwendung: $eingabe = readline("Bitte geben Sie etwas ein: ");
$eingabe = "Hallo"; // Simuliere Eingabe
if (strlen($eingabe) == 0) {
echo "Eingabe darf nicht leer sein!<br>";
}
} while (strlen($eingabe) == 0);
echo "Gültige Eingabe: $eingabe";
?>6.5 for-Schleife
Grundlegende for-Schleife
php
<?php
// Syntax: for (Initialisierung; Bedingung; Inkrement) { ... }
// Ausgabe von 1 bis 10
for ($i = 1; $i <= 10; $i++) {
echo $i . " ";
}
// Ausgabe: 1 2 3 4 5 6 7 8 9 10
// Auch möglich: Mehrere Variablen
for ($i = 1, $j = 10; $i <= 10; $i++, $j--) {
echo "i = $i, j = $j<br>";
}
// Schleife rückwärts
for ($i = 10; $i >= 1; $i--) {
echo $i . " ";
}
// Ausgabe: 10 9 8 7 6 5 4 3 2 1
?>Verschachtelte for-Schleifen
php
<?php
// Multiplikationstabelle (1-10)
echo "<table border='1'>";
for ($i = 1; $i <= 10; $i++) {
echo "<tr>";
for ($j = 1; $j <= 10; $j++) {
echo "<td>" . ($i * $j) . "</td>";
}
echo "</tr>";
}
echo "</table>";
// Sternchenmuster
for ($i = 1; $i <= 5; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo "* ";
}
echo "<br>";
}
/*
Ausgabe:
*
* *
* * *
* * * *
* * * * *
*/
?>6.6 foreach-Schleife (wichtig!)
foreach für Arrays
php
<?php
// Index-Array
$fruechte = ["Apfel", "Banane", "Kirsche"];
// foreach: Wert ausgeben
foreach ($fruechte as $frucht) {
echo $frucht . "<br>";
}
// foreach: Schlüssel und Wert ausgeben
foreach ($fruechte as $index => $frucht) {
echo "$index: $frucht<br>";
}
// Ausgabe:
// 0: Apfel
// 1: Banane
// 2: Kirsche
// Assoziatives Array
$person = [
"name" => "Max",
"alter" => 25,
"stadt" => "Berlin"
];
foreach ($person as $schluessel => $wert) {
echo "$schluessel: $wert<br>";
}
// Ausgabe:
// name: Max
// alter: 25
// stadt: Berlin
?>foreach mit Referenz (Array ändern)
php
<?php
$zahlen = [1, 2, 3, 4, 5];
// Jede Zahl mit 2 multiplizieren (ohne Referenz - funktioniert NICHT!)
foreach ($zahlen as $zahl) {
$zahl *= 2;
}
print_r($zahlen); // [1, 2, 3, 4, 5] (unverändert)
// Mit Referenz (&(Ampersand))
foreach ($zahlen as &$zahl) {
$zahl *= 2;
}
print_r($zahlen); // [2, 4, 6, 8, 10] (geändert!)
// Achtung: Nach foreach mit Referenz muss die Variable unset() werden!
unset($zahl); // Wichtig!
?>6.7 break / continue
break (Schleife abbrechen)
php
<?php
// break: Schleife sofort verlassen
for ($i = 1; $i <= 10; $i++) {
if ($i == 5) {
break; // Schleife bei $i = 5 abbrechen
}
echo $i . " ";
}
// Ausgabe: 1 2 3 4
// break mit Parameter (für verschachtelte Schleifen)
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 3; $j++) {
if ($j == 2) {
break 2; // 2 Ebenen unterbrechen (beide Schleifen)
}
echo "i=$i, j=$j<br>";
}
}
// Ausgabe:
// i=1, j=1
?>continue (nächste Iteration)
php
<?php
// continue: Rest der aktuellen Iteration überspringen
for ($i = 1; $i <= 10; $i++) {
if ($i % 2 == 0) {
continue; // Gerade Zahlen überspringen
}
echo $i . " ";
}
// Ausgabe: 1 3 5 7 9 (nur ungerade Zahlen)
// continue mit Parameter (für verschachtelte Schleifen)
for ($i = 1; $i <= 3; $i++) {
for ($j = 1; $j <= 3; $j++) {
if ($j == 2) {
continue 2; // 2 Ebenen überspringen (nächste $i-Iteration)
}
echo "i=$i, j=$j<br>";
}
}
// Ausgabe:
// i=1, j=1
// i=2, j=1
// i=3, j=1
?>6.8 Praxis: Schleifen, Zahlen raten
Aufgabe 1: Schreiben Sie ein Skript, das alle Primzahlen zwischen 1 und 100 ausgibt.
php
<?php
function istPrimzahl($n) {
if ($n < 2) return false;
for ($i = 2; $i <= sqrt($n); $i++) {
if ($n % $i == 0) return false;
}
return true;
}
echo "Primzahlen zwischen 1 und 100:<br>";
for ($i = 1; $i <= 100; $i++) {
if (istPrimzahl($i)) {
echo $i . " ";
}
}
// Ausgabe: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
?>Aufgabe 2: Zahlerratenspiel
php
<?php
// Zu erratende Zahl (in echtem Spiel würde sie zufällig generiert)
$geheimzahl = 42;
// Simuliere Benutzereingaben
$versuche = [30, 50, 40, 45, 42];
echo "<h3>Zahlenraten-Spiel</h3>";
echo "Erraten Sie die Zahl zwischen 1 und 100!<br><br>";
foreach ($versuche as $index => $versuch) {
echo "Versuch " . ($index + 1) . ": $versuch → ";
if ($versuch < $geheimzahl) {
echo "Zu niedrig!";
} elseif ($versuch > $geheimzahl) {
echo "Zu hoch!";
} else {
echo "<strong>Richtig! Sie haben die Zahl $geheimzahl erraten!</strong>";
break;
}
echo "<br>";
}
?>Zusammenfassung
In diesem Kapitel haben Sie:
- ✅
if/elseif/elsefür Bedingungen verwendet - ✅
switch casefür Mehrfachverzweigungen gelernt - ✅
while- unddo-while-Schleifen verstanden - ✅
for-Schleifen (einschließlich verschachtelter) verwendet - ✅
foreach-Schleifen für Arrays gemeistert - ✅
breakundcontinuezur Steuerung von Schleifen eingesetzt - ✅ Praxisbeispiele (Primzahlen, Zahlenraten) erstellt
Nächstes Kapitel: Wir werden Arrays (PHPs wichtigste Datenstruktur) vertiefen.
Übungsaufgaben:
- Schreiben Sie ein Skript, das die Fibonaccifolge (erste 20 Zahlen) ausgibt
- Erstellen Sie eine Multiplikationstabelle (1-10) mit verschachtelten Schleifen
- Verwenden Sie
foreach, um ein assoziatives Array zu durchlaufen und auszugeben - Schreiben Sie ein Skript, das prüft, ob eine Zahl eine Armstrong-Zahl ist
Häufige Fehler:
- ❌
breakvergessen inswitch→ Immerbreaknach jedemcase(außer absichtliches Durchfallen) - ❌ Endlosschleife durch fehlende Inkrementierung → Schleifenvariable immer aktualisieren
- ❌
foreachmit Referenz, aberunset()vergessen → Kann zu unerwarteten Fehlern führen - ❌
continueinswitchverwenden → Inswitchwirdcontinuenicht unterstützt (verwenden Siebreak)
