EMZETT.
Login

Kurz: // Alternative Syntax in Templates if ($punkte > 70): echo “über 70\n”; endif; `output gut bestanden über 70

Teil des Kurses PHP

Kapitel 4 von 15 im Kurs PHP. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

if, elseif, else

<?php
$punkte = 78;
if ($punkte >= 90) {
    echo "sehr gut\n";
} elseif ($punkte >= 75) {
    echo "gut\n";
} else {
    echo "weiter üben\n";
}
echo $punkte >= 50 ? "bestanden" : "durchgefallen", "\n";
 
// Alternative Syntax in Templates
if ($punkte > 70):
    echo "über 70\n";
endif;

Ausgabe:

gut
bestanden
über 70

switch und match

match (PHP 8) ist der moderne, strikte Ersatz für switch: Er liefert einen Wert, vergleicht mit ===, braucht kein break und wirft einen Fehler, wenn nichts passt.

<?php
$tag = 3;
switch ($tag) {
    case 6:
    case 7:
        echo "Wochenende\n";
        break;
    default:
        echo "Werktag\n";
}
 
$name = match ($tag) {
    1 => "Montag",
    2 => "Dienstag",
    3, 4 => "Mitte der Woche",
    default => "anderer Tag",
};
echo $name, "\n";
 
$note = 87;
echo match (true) {
    $note >= 90 => "A",
    $note >= 80 => "B",
    default => "C",
}, "\n";
 
try {
    echo match (99) { 1 => "eins" };
} catch (\UnhandledMatchError $e) {
    echo get_class($e), ": ", $e->getMessage(), "\n";
}

Ausgabe:

Werktag
Mitte der Woche
B
UnhandledMatchError: Unhandled match case of type int

Schleifen

<?php
for ($i = 1; $i <= 3; $i++) echo $i, " ";
echo "\n";
 
$n = 3;
while ($n > 0) { echo $n--, " "; }
echo "\n";
 
$k = 10;
do { echo $k, " "; } while ($k < 5);       // läuft mindestens einmal
echo "\n";
 
foreach ([10, 20, 30] as $index => $wert) echo "$index=$wert ";
echo "\n";
foreach (["a" => 1, "b" => 2] as $key => $value) echo "$key:$value ";
echo "\n";
 
foreach ([1, 2, 3, 4, 5, 6] as $z) {
    if ($z % 2) continue;                  // überspringen
    if ($z > 4) break;                     // abbrechen
    echo $z, " ";
}
echo "\n";
 
for ($i = 0; $i < 3; $i++) {
    for ($j = 0; $j < 3; $j++) {
        if ($j == 2) continue 2;           // äußere Schleife fortsetzen
        echo "$i$j ";
    }
}
echo "\n";

Ausgabe:

1 2 3
3 2 1
10
0=10 1=20 2=30
a:1 b:2
2 4
00 01 10 11 20 21

foreach mit Referenz

Mit & änderst du die Elemente direkt. Hänge danach die Referenz mit unset ab:

<?php
$preise = [10, 20, 30];
foreach ($preise as &$p) { $p *= 2; }
unset($p);
print_r($preise);

Ausgabe:

Array
(
    [0] => 20
    [1] => 40
    [2] => 60
)

Weitere Konstrukte

<?php
foreach (range(1, 10, 3) as $z) echo $z, " ";
echo "\n";
foreach (range('a', 'e') as $c) echo $c;
echo "\n";
[$a, [$b, $c]] = [1, [2, 3]];
['x' => $x, 'y' => $y] = ['x' => 10, 'y' => 20];
echo "$a$b$c $x $y\n";
foreach ([[1, 2], [3, 4]] as [$l, $r]) echo $l + $r, " ";
echo "\n";
goto ende;
echo "wird übersprungen\n";
ende:
echo "Ende\n";

Ausgabe:

1 4 7 10
abcde
123 10 20
3 7
Ende

Merke

  • if / elseif / else, ternär, ??
  • match ist strikt, liefert einen Wert und wirft UnhandledMatchError
  • Schleifen: for, while, do-while, foreach (am häufigsten)
  • break und continue (auch mit Ebenenangabe)
  • foreach ($a as &$x) ändert Elemente, danach unset($x)

Übungsaufgabe

Gib die Zahlen von 1 bis 30 aus; bei Vielfachen von 3 “Fizz”, von 5 “Buzz”, von beiden “FizzBuzz” (mit match).

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Operatoren und Strings

Weiter: Arrays

Alle Kapitel: PHP im Überblick