Lezioni di PHP - Lezione 8-2 - L’operatore switch
Nella lezione precedente abbiamo imparato a usare l’istruzione if. L’istruzione if ci permette di verificare se una condizione è vera e, a seconda del risultato, eseguire le azioni necessarie.
Ora immaginiamo di dover eseguire dieci verifiche diverse e, a seconda del risultato, eseguire dieci diverse azioni. Certo, possiamo scriverlo con una serie di if:
<?php
if($x == 1){
// azione
}
if($x == 2){
// azione
}
if($x == 3){
// azione
}
if($x == 4){
// azione
}
if($x == 5){
// azione
}
if($x == 6){
// azione
}
if($x == 7){
// azione
}
if($x == 8){
// azione
}
if($x == 9){
// azione
}
if($x == 10){
// azione
}
?>
Questo metodo funziona, ma è molto più comodo scrivere controlli multipli usando l’operatore switch.
PHP switch
L’operatore switch permette di confrontare un valore con molti casi possibili. Riscriviamo l’esempio precedente usando switch:
<?php
switch ($x){
case 1:
// azione
break;
case 2:
// azione
break;
case 3:
// azione
break;
case 4:
// azione
break;
case 5:
// azione
break;
case 6:
// azione
break;
case 7:
// azione
break;
case 8:
// azione
break;
case 9:
// azione
break;
case 10:
// azione
break;
default:
// azione se nessun altro caso corrisponde
}
?>
Come puoi vedere, entrambi i metodi funzionano allo stesso modo. Tuttavia, con switch abbiamo anche la possibilità di aggiungere default, che viene eseguito se nessuno dei case precedenti corrisponde (cioè se $x non è compreso tra 1 e 10).
Vediamo ora com’è strutturato lo switch. Per prima cosa scriviamo la parola chiave switch, seguita tra parentesi tonde dal valore o espressione da verificare. Può essere sia un numero che una stringa, ad esempio:
<?php
switch ($x){
case 'Hello':
break;
case 'Bye':
break;
}
?>
Dopo l’espressione da controllare apriamo le parentesi graffe. All’interno scriviamo i possibili case e le relative azioni da eseguire:
<?php
switch ($x){
case 'Hello': // valore possibile
print $x; // azione
break; // fine del caso
case 2:
$x++;
break;
}
?>
Ogni case specifica un valore possibile. Se il valore di $x corrisponde a quello indicato, viene eseguito il blocco di istruzioni associato fino a trovare break;, che interrompe l’esecuzione dello switch. Se dimentichi di inserire break;, l’esecuzione continuerà anche nei casi successivi.
Alla fine puoi inserire default, che verrà eseguito se nessun altro case è stato verificato come vero. Quindi, ricorda due regole fondamentali:
- Non dimenticare di mettere
break;alla fine di ogni caso. - Nel blocco
defaultilbreak;è facoltativo, poiché è sempre l’ultimo.
Ecco uno schema a blocchi del funzionamento di switch:

Per esempio, possiamo usare switch per determinare il giorno della settimana in base al numero di giorni trascorsi da un lunedì:
<?php
// $D è il numero di giorni trascorsi dal lunedì
$x = $D % 7;
switch ($x){
case 1:
print 'lunedì';
break;
case 2:
print 'martedì';
break;
case 3:
print 'mercoledì';
break;
case 4:
print 'giovedì';
break;
case 5:
print 'venerdì';
break;
case 6:
print 'sabato';
break;
case 7:
print 'domenica';
break;
}
?>