Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 16 di 67
  • livello intermedio
Indice lezioni

Istruzione Switch e operatore ternario

Scopriamo come rendere più snello il codice delle istruzioni condizionali in PHP con l'istruzione switch e l'operatore ternario.
Scopriamo come rendere più snello il codice delle istruzioni condizionali in PHP con l'istruzione switch e l'operatore ternario.
Link copiato negli appunti

Nella precedente lezione sono state introdotte le istruzioni condizionali che, attraverso le keywords if, else e endif, consentono di effettuare operazioni in base al valore di una variabile o di un'istruzione. In questa lezione, invece, verrà un'altro costrutto condizionale, lo switch che permette di racchiudere in un unico blocco di codice diverse istruzioni condizionali.

if/elseif/else Vs. switch

Si analizzi un esempio di istruzione condizionale basata sull'utilizzo combinato di if, elseif ed else nel medesimo blocco di codice:

$colore = 'rosso';
if ($colore == 'blu') {
    echo "Il colore selezionato è blu";
} elseif ($colore == 'giallo') {
    echo "Il colore selezionato è giallo";
} elseif ($colore == 'verde') {
    echo "Il colore selezionato è verde";
} elseif ($colore == 'rosso') {
    echo "Il colore selezionato è rosso";
} elseif ($colore == 'arancione') {
    echo "Il colore selezionato è arancione";
} else {
    echo "Nessun colore corrispondente alla tua selezione";
}

In pratica, il codice proposto in precedenza verifica il valore di una variabile che corrisponde ad un colore definito dall'utente. Se tale colore è uno tra "blu", "giallo", "verde", "rosso" (il valore corretto nel caso dell'esempio) o "arancione", allora il sistema stamperà l'output previsto per la conferma, altrimenti verrà mostrato un messaggio di errore introdotto tramite else.

Lo stesso codice potrà essere riscritto, in una maniera più leggibile e semplice da gestire, attraverso il costrutto switch:

$colore = 'rosso';
switch ($colore) {
    case 'blu':
        echo "Il colore selezionato è blu";
        break;
    case 'giallo':
        echo "Il colore selezionato è giallo";
        break;
    case 'verde':
        echo "Il colore selezionato è verde";
        break;
    case 'rosso':
        echo "Il colore selezionato è rosso";
        break;
    case 'arancione':
        echo "Il colore selezionato è arancione";
        break;
    default:
        echo "Nessun colore corrispondente alla tua selezione";
        break;
}

Come è possibile notare, il costrutto switch contiene tra parentesi l'espressione da verificare e al suo interno una serie di case che rappresentano i possibili valori da valutare. Al termine di ogni case, inoltre, viene inserita la keyword break che ci farà uscire l'esecuzione dell'istruzione dallo switch. Tale keyword è importante perché, senza di essa, verrebbero valutati anche gli altri case contenuti nello switch, incluso il default che è quello valutato quando nessuno degli altri case soddisfa la condizione.

switch e sequenze di case

I case possono anche essere sequenziali quindi, nel caso in cui diversi valori contengono lo stesso codice da eseguire, potranno essere inseriti in sequenza:

$colore = 'rosso';
switch ($colore) {
    case 'blu':
    case 'verde':
        echo "Il colore selezionato è un colore freddo";
        break;
    case 'giallo':
    case 'rosso':
    case 'arancione':
        echo "Il colore selezionato è un colore caldo";
        break;
    default:
        echo "Nessun colore corrispondente alla tua selezione";
        break;
}

Nell'esempio presentato lo switch esegue la stessa istruzione in casi differenti. Quindi, se il colore è "blu" o "verde", allora visualizzeremo il messaggio relativo ai colori freddi, se il colore è "giallo", "rosso" o "arancione" verrà visualizzato il messaggio relativo ai coloro caldi. Se invece il colore non viene identificato da nessuno dei casi, verrà mostrato un messaggio di errore.

Introduzione all'operatore ternario

L'operatore ternario rappresenta un'altra alternativa sintattica al costrutto if/else, esso è così chiamato perché è formato da tre espressioni: il valore restituito è quello della seconda o della terza di queste espressioni, a seconda che la prima sia vera o falsa. In pratica, si può considerare, in certi casi, una maniera molto sintetica di effettuare un costrutto condizionale basato su if.

($altezza >= 180) ? 'alto' : 'normale';

Questa espressione prenderà il valore "alto" se la variabile $altezza è maggiore o uguale a "180", "normale" nel caso opposto. L'espressione condizionale è contenuta fra parentesi e seguita da un punto interrogativo, mentre due punti separano la seconda espressione dalla terza. Questo costrutto può essere utilizzato, ad esempio, per valorizzare velocemente una variabile senza ricorrere all'if. In pratica:

$tipologia = ($altezza >= 180) ? 'alto' : 'normale';

equivale a scrivere:

if ($altezza >= 180)
$tipologia = 'alto';
else
$tipologia = 'normale';

Come è possibile notare, in termini di complessità il risparmio è abbastanza significativo. Bisognerà però stare attenti a non abusare di questo operatore, perché esso potrebbe rendere più difficoltosa la leggibilità di uno script, anche se risulta di indubbia utilità nel caso in cui si necessiti rendere più compatto il codice.

Ti consigliamo anche