2012-02-13 12 views
6

che sto debug del codice per un cliente e trovato la seguente sintassi:Punto e virgola dopo un caso valido in una istruzione switch PHP?

switch ($i) { 
    case 0; 
     echo "i equals 0"; 
     break; 
    case 1; 
     echo "i equals 1"; 
     break; 
    case 2; 
     echo "i equals 2"; 
     break; 
} 

dichiarazioni Il caso finisce in un punto e virgola, piuttosto che due punti. Risulta che questo è compilato, ma è legittimo? Non ho mai visto prima quella sintassi.

+1

@LeviMorrison no, non lo farai. Non c'è una logica sottostante qui che possa essere compresa razionalmente; PHP consente arbitrariamente un punto e virgola dopo un caso invece di due punti per qualche motivo. La stessa sintassi è un errore in C. –

risposta

12

Dal documentation:

E 'possibile utilizzare un punto e virgola al posto di due punti dopo un caso come:

switch($beer) 
{ 
    case 'tuborg'; 
    case 'carlsberg'; 
    case 'heineken'; 
     echo 'Good choice'; 
    break; 
    default; 
     echo 'Please make a new selection...'; 
    break; 
} 
-2

Yup, così come lungo come $i ha un valore numerico

+0

No, funzionerà comunque. 'true' = 1; 'false' = 0; '" stringa "' = 0; Solo '$ i = array ('qualcosa')' non stampa nulla. Ma non darà alcun errore. – Shoe

+0

beh, dovrei essere un po 'avanti con esso, stavo implicando che può essere passato un valore stringa o int. Scusa per la mia scarsa scelta di parole =) – Eli

+0

In realtà funziona con tutto, anche 'NULL'. Con nul o un non impostato '$ i' stamperà 0. – Shoe

-1

Come potete controllare qui, funziona: http://codepad.org/hOLQP98D penso che funzioni perché cade attraverso

+0

-1; questo non ha nulla a che fare con il fall-through. Sei solo autorizzato a usare un punto e virgola anziché i due punti dopo un caso, perché per qualsiasi motivo gli sviluppatori di PHP hanno deciso di farlo in quel modo. –

Problemi correlati