Valgfriheten av break i PHP
Kommandoen break er valgfri.
Uten den vil imidlertid oppførselen til case-blokkene
være uventet. La oss se på et eksempel.
La oss si vi har kode som dette:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
La oss fjerne alle break i den, og i variabelen
$num til å begynne med, skrive inn tallet 3.
Foreløpig vil alt fungere slik det gjorde:
<?php
$num = 3; // la oss si tallet her er 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Etter oppstart vil koden skrive ut 3 - alt er bra
?>
La oss nå i variabelen $num skrive inn
tallet 2. I dette tilfellet vil case 2
forventningsfullt utføres, og deretter uventet
også case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Etter oppstart vil koden skrive ut 2, og deretter 3
?>
Hvis man derimot skriver tallet 1 inn i variabelen
$num, vil alle case-konstruksjonene
utføres:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Etter oppstart vil koden skrive ut 1, deretter 2, og deretter 3
?>
Det vil si at det viser seg at ved fravær av break,
etter utførelsen av den tiltenkte case,
vil alle case under den også utføres. Noen ganger
brukes denne egenskapen når man løser oppgaver.
I det følgende eksempelet, hvis variabelen $num
har verdien 1 eller 2, vil
strengen 'a' bli skrevet inn i variabelen $res.
Hvis variabelen $num derimot har verdien
3, vil strengen 'b' bli skrevet
inn i variabelen $res:
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Tidligere skrev jeg at noen ganger brukes denne egenskapen, men jeg anbefaler egentlig ikke å bruke den, fordi koden blir ikke veldig opplagt.
Det er mer åpenbart å løse en slik oppgave med if-setninger:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>