Die Optionalität von break in PHP
Der Befehl break ist optional.
Ohne ihn wird das Verhalten der case-Blöcke
jedoch unerwartet sein. Schauen wir uns ein Beispiel an.
Nehmen wir an, wir haben folgenden Code:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Entfernen wir alle break daraus und schreiben
zunächst die Zahl 3 in die Variable $num.
Zunächst wird alles so funktionieren wie zuvor:
<?php
$num = 3; // Nehmen wir an, hier steht die Zahl 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Nach dem Start gibt der Code 3 aus - alles in Ordnung
?>
Schreiben wir nun die Zahl 2 in die Variable
$num. In diesem Fall wird erwartungsgemäß
case 2 ausgeführt, und dann unerwarteterweise
auch noch case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Nach dem Start gibt der Code 2 und dann 3 aus
?>
Wenn man die Zahl 1 in die Variable $num
schreibt, werden sogar alle case-Konstruktionen
ausgeführt:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Nach dem Start gibt der Code 1, dann 2 und dann 3 aus
?>
Das bedeutet, dass bei Fehlen von break
nach Ausführung des beabsichtigten case
auch alle case-Blöcke unterhalb ausgeführt werden.
Manchmal wird diese Besonderheit bei der Lösung von
Aufgaben genutzt.
Im folgenden Beispiel wird, wenn die Variable $num
den Wert 1 oder 2 hat,
in die Variable $res der Wert 'a'
geschrieben. Wenn die Variable $num hingegen den Wert
3 hat, wird in die Variable $res
der Wert 'b' geschrieben:
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Weiter oben habe ich geschrieben, dass manchmal diese Besonderheit genutzt wird, aber im Grunde empfehle ich nicht, sie zu verwenden, da der Code dann nicht mehr sehr offensichtlich ist.
Es ist naheliegender, eine solche Aufgabe mit If-Anweisungen zu lösen:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>