Istruzione SWITCH

Gli argomenti di questa pagina

  • SWITCH...CASE...DEFAULT...BREAK
  • Raggruppare blocchi CASE
  • Errore

L'istruzione SWITCH è simile a una serie di IF sulla stessa espressione. In molte occasioni, è necessario confrontare la stessa variabile (o espressione) con molti valori diversi, ed eseguire un differente blocco di codice a seconda di quale valore è uguale alla variabile in esame. L'espressione o variabile indicata tra parentesi tonde dopo la parola chiave SWITCH verrà comparata con ciascun valore che segue le varie parole chiave CASE dell'intero costrutto. E' necessario che ogni blocco di istruzioni che è scritto in ogni blocco CASE termini con l'istruzione BREAK.

SWITCH...CASE...DEFAULT...BREAK

L'istruzione SWITCH viene utilizzata per eseguire diverse azioni in base a diverse condizioni.

La sintassi:
switch (val) {
case val_1:
blocco di codice se val == val_1
break;
case val_2:
blocco di codice se val == val_2
break;
default:
blocco di codice se val non ha avuto alcun riscontro nei casi precedenti
}

In primo luogo abbiamo una sola espressione val (il più delle volte una variabile), che viene valutata una volta. Il valore dell'espressione viene quindi confrontato con i valori per ciascun CASE nella struttura. Se vi è una corrispondenza, il blocco di codice associato a quel CASE viene eseguito. Utilizzare BREAK per impedire l'esecuzione automatica del codice nei CASE successivi. La dichiarazione di DEFAULT viene utilizzato se non viene trovata alcuna corrispondenza.

È importante comprendere come l'istruzione SWITCH viene eseguita al fine di evitare errori.
L'istruzione SWITCH esamina tutto il costrutto SWITCH riga per riga.
Fintanto non viene trovata una corrispondenza del valore con quello indicato nei vari CASE non viene eseguito nessun blocco di codice.
Solo quando una istruzione CASE trova un valore che corrisponde al valore dell'espressione, PHP inizia ad eseguire le istruzioni delle varie istruzioni CASE. Dopo il primo riscontro positivo, PHP continua l'esecuzione delle istruzioni fino alla fine del blocco SWITCH, o fino a che incontra un'istruzione BREAK. Se non si scrive una istruzione BREAK al termine di ciascun blocco di istruzioni CASE, PHP continuerà l'esecuzione dei blocchi di istruzioni di ogni singolo CASE fino alla fine.

Per finire è possibile indicare, alla fine dell'intero costrutto SWITCH, una istruzione "DEFAULT" che indica a PHP il comportamento da tenersi qualora nessuna delle condizioni indicate sopra si realizzi. L'istruzione "DEFAULT" è facoltativa, ma quando c'è deve essere l'ultima della SWITCH.

Primo esempio: dato un giorno della settimana si deve stabilire se è lavorativo o no.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$giorno_settimana 
3;
switch (
$giorno_settimana) {    
    case 
1:
        echo 
"lunedì: giorno lavorativo<br />\n";
        break;
    case 
2:
        echo 
"martedì: giorno lavorativo<br />\n";
        break;
    case 
3:
        echo 
"mercoledì: giorno lavorativo<br />\n";
        break;
    case 
4:
        echo 
"giovedì: giorno lavorativo<br />\n";
        break;
    case 
5:
        echo 
"venerdì: giorno lavorativo<br />\n";
        break;
    default:
        echo 
"sabato o domenica: prefestivo o festivo<br />\n";
        break;
}
?>

mercoledì: giorno lavorativo

Raggruppare blocchi CASE

Secondo esempio: alcuni blocchi CASE vengono raggruppati. In questo caso tutti i blocchi raggruppati formano un unico blocco condizionale.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$mese 
"aprile";
switch (
$mese) {
    case 
"febbraio":
        echo 
$mese " &egrave; bisestile<br />\n";
        break;
    case 
"gennaio":
        echo 
$mese ": primo mese dell'anno<br />\n";
        break;
    case 
"marzo":
    case 
"maggio":
    case 
"luglio":
    case 
"agosto":
    case 
"ottobre":
    case 
"dicembre":
        echo 
$mese " ha 31 giorni<br />\n";
        break;
    default:
        echo 
$mese " ha 30 giorni<br />\n";
        break;
}
?>

aprile ha 30 giorni

Errore

Terzo esempio errato: questo è un modo errato di usare il costrutto switch. Infatti ho voluto intenzionalmente omettere l'istruzione break e, come si nota, dopo aver riconosciuto il valore 3, l'output continua coi case sottostanti.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$giorno_settimana 
3;
switch (
$giorno_settimana) {    
    case 
1:
        echo 
"lunedì: giorno lavorativo<br />\n";
    case 
2:
        echo 
"martedì: giorno lavorativo<br />\n";
    case 
3:
        echo 
"mercoledì: giorno lavorativo<br />\n";
    case 
4:
        echo 
"giovedì: giorno lavorativo<br />\n";
    case 
5:
        echo 
"venerdì: giorno lavorativo<br />\n";
    default:
        echo 
"sabato o domenica: prefestivo o festivo<br />\n";
}
?>

mercoledì: giorno lavorativo
giovedì: giorno lavorativo
venerdì: giorno lavorativo
sabato o domenica: prefestivo o festivo

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum