Skip to content

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

SituationEmpfehlung
Viele exakte Gleichheitsprüfungenswitch (schneller, lesbarer)
Bereichsprüfungen (z.B. $note > 90)if-elseif-else
Komplexe Bedingungenif-elseif-else
Viele case-Zweigeswitch

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/else für Bedingungen verwendet
  • switch case für Mehrfachverzweigungen gelernt
  • while- und do-while-Schleifen verstanden
  • for-Schleifen (einschließlich verschachtelter) verwendet
  • foreach-Schleifen für Arrays gemeistert
  • break und continue zur Steuerung von Schleifen eingesetzt
  • ✅ Praxisbeispiele (Primzahlen, Zahlenraten) erstellt

Nächstes Kapitel: Wir werden Arrays (PHPs wichtigste Datenstruktur) vertiefen.


Übungsaufgaben:

  1. Schreiben Sie ein Skript, das die Fibonaccifolge (erste 20 Zahlen) ausgibt
  2. Erstellen Sie eine Multiplikationstabelle (1-10) mit verschachtelten Schleifen
  3. Verwenden Sie foreach, um ein assoziatives Array zu durchlaufen und auszugeben
  4. Schreiben Sie ein Skript, das prüft, ob eine Zahl eine Armstrong-Zahl ist

Häufige Fehler:

  • break vergessen in switch → Immer break nach jedem case (außer absichtliches Durchfallen)
  • ❌ Endlosschleife durch fehlende Inkrementierung → Schleifenvariable immer aktualisieren
  • foreach mit Referenz, aber unset() vergessen → Kann zu unerwarteten Fehlern führen
  • continue in switch verwenden → In switch wird continue nicht unterstützt (verwenden Sie break)

Frei für alle Anfänger