Valgfriheden af break i PHP
Kommandoen break er valgfri.
Uden den vil opførslen af case-blokkene
dog være uventet. Lad os se på et eksempel.
Antag, at vi har følgende kode:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Lad os fjerne alle break i den, og i variablen
$num til at starte med skrive tallet 3.
Indtil nu vil alt fungere, som det plejede:
<?php
$num = 3; // lad os sige tallet er 3 her
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Efter kørsel vil koden udskrive 3 - alt er godt
?>
Lad os nu skrive tallet 2 i variablen $num. I dette tilfælde vil case 2 forventeligt
blive udført, og derefter uventet også case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Efter kørsel vil koden udskrive 2 og derefter 3
?>
Hvis vi derimod skriver tallet 1 i variablen $num, vil alle
case-konstruktioner blive udført:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Efter kørsel vil koden udskrive 1, derefter 2 og derefter 3
?>
Det viser sig altså, at ved fravær af break,
efter udførelsen af den tiltænkte case,
vil alle case under den også blive udført. Undertiden
bruges denne egenskab, når man løser opgaver.
I det følgende eksempel, hvis variablen $num
har værdien 1 eller 2, så
bliver 'a' skrevet i variablen $res.
Hvis variablen $num derimod har værdien
3, så bliver 'b'
skrevet i variablen $res:
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Jeg skrev ovenfor, at denne egenskab undertiden bruges, men jeg anbefaler generelt set ikke at bruge den, da koden bliver mindre indlysende.
Det er mere tydeligt at løse en sådan opgave med if-sætninger:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>