L'opzionalità di break in PHP
Il comando break è opzionale.
Tuttavia, senza di esso, il comportamento dei blocchi case
sarà inaspettato. Diamo un'occhiata a un esempio.
Supponiamo di avere il seguente codice:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
break;
case 2:
echo 2;
break;
case 3:
echo 3;
break;
}
?>
Rimuoviamo tutti i break e, per cominciare,
inseriamo il numero 3 nella variabile
$num.
Inizialmente, tutto funzionerà come prima:
<?php
$num = 3; // supponiamo che qui ci sia il numero 3
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Dopo l'esecuzione, il codice mostrerà 3 - tutto bene
?>
Ora inseriamo il numero 2 nella variabile $num.
In questo caso, verrà eseguito case 2 come previsto,
e poi, inaspettatamente, anche case 3:
<?php
$num = 2;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Dopo l'esecuzione, il codice mostrerà 2, e poi 3
?>
Se invece inseriamo il numero 1 nella variabile $num,
verranno eseguite tutte le strutture case:
<?php
$num = 1;
switch ($num) {
case 1:
echo 1;
case 2:
echo 2;
case 3:
echo 3;
}
// Dopo l'esecuzione, il codice mostrerà 1, poi 2 e poi 3
?>
Quindi, in assenza di break,
dopo l'esecuzione del case previsto,
verranno eseguiti anche tutti i case successivi.
A volte questa caratteristica viene utilizzata per risolvere problemi.
Nel seguente esempio, se la variabile $num
ha valore 1 o 2,
nella variabile $res verrà scritto 'a'.
Se invece la variabile $num ha valore
3, nella variabile $res
verrà scritto 'b':
<?php
$num = 1;
switch ($num) {
case 1:
case 2:
$res = 'a';
break;
case 3:
$res = 'b';
break;
}
echo $res;
?>
In precedenza ho scritto che a volte questa caratteristica viene utilizzata, ma in generale, non raccomando di usarla, poiché il codice diventa poco chiaro.
È più ovvio risolvere un problema del genere con gli if:
<?php
$num = 1;
if ($num == 1 or $num == 2) {
$res = 'a';
}
if ($num == 3) {
$res = 'b';
}
echo $res;
?>