Break neobligātums PHP
Komanda break ir neobligāta.
Bez tās, tomēr, case bloku darbība
būs negaidīta. Apskatīsim piemērā.
Pieņemsim, ka mums ir šāds kods:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Noņemsim no tā visus break, un mainīgajā
$num sākumā ierakstīsim skaitli 3.
Sākumā viss darbosies tā, kā darbojās:
<?php
$num = 3; // pieņemsim, ka šeit ir skaitlis 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Pēc palaišanas kods izvadīs 3 - viss labi
?>
Ierakstīsim tagad mainīgajā $num
skaitli 2. Šajā gadījumā mums, kā gaidīts,
izpildīsies case 2, un tad negaidīti
arī case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Pēc palaišanas kods izvadīs 2 un pēc tam 3
?>
Ja mainīgajā $num ierakstītu
skaitli 1, tad izpildītos visi
case bloki:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Pēc palaišanas kods izvadīs 1, tad 2 un pēc tam 3
?>
Tātad sanāk, ka, ja nav break,
pēc iecerētā case izpildes,
izpildīsies arī visi case zem tā. Dažreiz
šo īpatnību izmanto, risinot uzdevumus.
Nākamajā piemērā, ja mainīgajam $num
ir vērtība 1 vai 2, tad
mainīgajā $res ierakstīsies 'a'.
Ja mainīgajam $num ir vērtība
3, tad mainīgajā $res
ierakstīsies 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Iepriekš es rakstīju, ka dažreiz šo īpatnību izmanto, bet es, kopumā, neatbalstu tās lietošanu, jo kods kļūst ne ļoti acīmredzams.
Acīmredzamāk šādu uzdevumu atrisināt ar if:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>