Valfriheten av break i PHP
Kommandot break är valfritt.
Utan det kommer dock beteendet hos blocken case
att bli oväntat. Låt oss titta på ett exempel.
Anta att vi har följande kod:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Låt oss ta bort alla break i den, och i variabeln
$num till att börja med skriva in talet 3.
För tillfället kommer allt att fungera som det gjorde:
<?php
$num = 3; // låt oss säga att det är 3 här
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Efter uppstart kommer koden att skriva ut 3 - allt är bra
?>
Låt oss nu i variabeln $num skriva
talet 2. I det här fallet kommer vår förväntade
case 2 att utföras, och sedan oväntat
även case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Efter uppstart kommer koden att skriva ut 2 och sedan 3
?>
Om vi däremot i variabeln $num skriver
talet 1, kommer alla
konstruktioner case att utföras:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Efter uppstart kommer koden att skriva ut 1, sedan 2 och sedan 3
?>
Det visar sig alltså att i avsaknad av break,
efter exekvering av den avsedda case,
kommer även alla case under den att exekveras. Ibland
används denna egenskap när man löser problem.
I följande exempel, om variabeln $num
har värdet 1 eller 2, så
kommer 'a' att skrivas in i variabeln $res.
Om variabeln $num däremot har värdet
3, så kommer 'b'
att skrivas in i variabeln $res:
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Ovan skrev jag att denna egenskap ibland används, men jag rekommenderar i allmänhet inte att använda den, eftersom koden blir inte särskilt uppenbar.
Det är mer uppenbart att lösa ett sådant problem med if-satsar:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>