PHP

Switch

Strutture Condizionali PHP: L'Istruzione SWITCH


🎯 Strutture Condizionali: L'Istruzione SWITCH

L'istruzione switch è un'alternativa più pulita ed efficiente per sostituire lunghe catene di **if...elseif...else** quando si deve confrontare una singola variabile con **molti possibili valori** discreti.


1. La Sintassi Base: switch, case e break

Il funzionamento è il seguente: PHP valuta l'espressione passata a switch e la confronta, una alla volta, con i valori specificati in ciascun blocco case.

  • switch (espressione): L'espressione o variabile da valutare.
  • case valore:: Il blocco di codice eseguito se l'espressione corrisponde a quel valore.
  • break;: **Fondamentale!** Dice a PHP di uscire immediatamente dallo switch. Se omesso, l'esecuzione **continua** al blocco case successivo (fenomeno chiamato "fall-through").
<?php
    $giorno_settimana = 3;

    switch ($giorno_settimana) {
        case 1:
            echo "Lunedì";
            break;
        case 2:
            echo "Martedì";
            break;
        case 3:
            echo "Mercoledì";
            break; // Questo break ferma l'esecuzione!
        case 4:
            echo "Giovedì";
            // ... e così via ...
            break;
    }

    // Output: Mercoledì
?>

2. Il Caso di Sostituzione: default

Se nessuno dei valori case corrisponde all'espressione, possiamo definire un blocco di codice da eseguire utilizzando la parola chiave default. Equivale all'istruzione else di un blocco if.

<?php
    $semaforo = "viola";

    switch ($semaforo) {
        case "rosso":
            echo "Stop!";
            break;
        case "verde":
            echo "Vai!";
            break;
        default:
            // Eseguito se $semaforo non è né "rosso" né "verde"
            echo "Attenzione: Colore non valido!";
            break;
    }

    // Output: Attenzione: Colore non valido!
?>

3. Attenzione al break (Fall-Through)

L'omissione di break è un errore comune ma a volte può essere usato intenzionalmente per eseguire il codice di più case.

<?php
    $livello_utente = "Admin";

    switch ($livello_utente) {
        case "SuperAdmin":
            // Se è SuperAdmin, eredita anche i permessi di Admin
        case "Admin": // Inizia qui se $livello_utente è "Admin" o arriva da "SuperAdmin"
            echo "Hai permessi di scrittura e cancellazione.";
            break;
        case "Utente":
            echo "Hai permessi di sola lettura.";
            break;
    }
?>