W3docs

endswitch

L'istruzione endswitch chiude un blocco switch in PHP con la sintassi alternativa ai due punti. Scopri quando usarla e gli errori più comuni.

Introduzione

endswitch chiude un'istruzione switch scritta con la sintassi alternativa di PHP — la forma che sostituisce la parentesi graffa aperta { con i due punti : e la parentesi graffa chiusa } con la parola chiave endswitch;. Non è una funzionalità del linguaggio separata, bensì il delimitatore di chiusura di un modo particolare di scrivere switch.

PHP offre due modi equivalenti per scrivere istruzioni a blocco come switch, if, for, foreach e while:

  • Sintassi con parentesi graffeswitch (...) { ... }
  • Sintassi alternativa (con due punti)switch (...): ... endswitch;

Questa pagina spiega quando endswitch è obbligatorio, perché esiste la sintassi alternativa e la trappola che inganna più spesso gli sviluppatori.

Sintassi: graffe vs. endswitch

I due frammenti seguenti fanno esattamente la stessa cosa. L'unica differenza è come il blocco viene aperto e chiuso.

<?php
// Curly-brace syntax — no endswitch
switch ($n) {
  case 1:
    echo "one";
    break;
  default:
    echo "other";
}
<?php
// Alternative syntax — colon opens, endswitch closes
switch ($n):
  case 1:
    echo "one";
    break;
  default:
    echo "other";
endswitch;

endswitch è obbligatorio con la forma a due punti e non valido con la forma a graffe — si sceglie uno stile per ogni switch e lo si mantiene coerente. Mescolarli (un apritore : con un chiusore }, o viceversa) è un errore di parsing.

Esempio

Ecco un esempio completo ed eseguibile che utilizza la sintassi alternativa:

<?php

$dayOfWeek = 2;
switch ($dayOfWeek):
  case 1:
    echo "Today is Monday";
    break;
  case 2:
    echo "Today is Tuesday";
    break;
  case 3:
    echo "Today is Wednesday";
    break;
  case 4:
    echo "Today is Thursday";
    break;
  case 5:
    echo "Today is Friday";
    break;
  default:
    echo "It is the weekend!";
endswitch;

Poiché $dayOfWeek vale 2, viene eseguito il ramo case 2: che stampa Today is Tuesday. Il break alla fine di ogni ramo esce dal switch affinché i casi successivi non vengano eseguiti, e default: gestisce qualsiasi valore che non corrisponde a nessun case. La riga endswitch; chiude la struttura; l'esecuzione continua con ciò che viene dopo.

Perché usare la sintassi alternativa?

La forma con i due punti esiste principalmente per i template che alternano PHP e HTML. Quando il corpo di una struttura di controllo si estende su molte righe di markup, una } sperduta è facile da posizionare in modo errato e difficile da identificare a colpo d'occhio. La parola chiave endswitch rende il punto di chiusura ovvio — si capisce immediatamente che è accoppiata con switch, esattamente come </div> si accoppia con <div>.

Questo pattern è comune nei template PHP puro (e nei framework che li compilano):

<?php switch ($status): ?>
  <?php case 'active': ?>
    <p>Your account is active.</p>
    <?php break; ?>
  <?php case 'pending': ?>
    <p>Your account is awaiting approval.</p>
    <?php break; ?>
  <?php default: ?>
    <p>Account status unknown.</p>
<?php endswitch; ?>

In questo caso i rami producono HTML direttamente invece di usare echo. La sintassi alternativa mantiene brevi i tag <?php ?> e il endswitch di chiusura è auto-documentante. Con le graffe, il chiusore sarebbe un solitario <?php } ?> — molto meno leggibile in mezzo a una quantità di markup.

Trappola comune: nessun output prima del primo case

Nella sintassi alternativa di switch non si deve emettere alcun HTML o spazio tra la riga switch(...): e il primo case. In un template, il testo inserito lì viene inviato al browser incondizionatamente e PHP solleva un avviso, quindi si tenga il tag di apertura strettamente vicino al primo <?php case ...: ?>.

Riferimenti correlati

  • switch e PHP switch — l'istruzione che endswitch chiude
  • break — esce da un case per evitare il fall-through
  • endif, endfor, endforeach — i chiusori della sintassi alternativa per le altre strutture di controllo

Esercizio

Pratica
Cosa indica l'istruzione 'endswitch' in PHP?
Cosa indica l'istruzione 'endswitch' in PHP?
Was this page helpful?