Opționalitatea break în PHP
Instrucțiunea break este opțională.
Fără ea, însă, comportamentul blocurilor case
va fi neașteptat. Să ne uităm la un exemplu.
Să presupunem că avem următorul cod:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Să eliminăm toate instrucțiunile break, iar în variabila
$num pentru început să atribuim numărul 3.
Pentru moment, totul va funcționa așa cum a funcționat:
<?php
$num = 3; // să presupunem că aici este numărul 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// După execuție, codul va afișa 3 - totul este în regulă
?>
Să atribuim acum variabilei $num
numărul 2. În acest caz, se va executa așteptat
case 2, apoi, în mod neașteptat,
și case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// După execuție, codul va afișa 2, apoi 3
?>
Dacă variabilei $num i se atribuie
numărul 1, atunci se vor executa toate
constructiile case:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// După execuție, codul va afișa 1, apoi 2, apoi 3
?>
Adică, se dovedește că, în absența break,
după executarea case-ului intenționat,
se vor executa și toate case-urile de sub el. Uneori
această particularitate este folosită în rezolvarea problemelor.
În următorul exemplu, dacă variabila $num
are valoarea 1 sau 2, atunci
în variabila $res se va scrie 'a'.
Dacă variabila $num are valoarea
3, atunci în variabila $res
se va scrie 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
Mai sus am spus că uneori această particularitate este folosită, dar, în general, nu recomand să o folosiți, deoarece codul devine mai puțin evident.
Este mai evident să rezolvi o astfel de problemă cu instrucțiuni if:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>