2016-01-27 9 views
6

Recentemente ho incontrato l'errore di sintassi istruzione switch descritto http://php.net/manual/en/control-structures.alternative-syntax.phpPerché uscita in una dichiarazione interruttore alternativo-sintassi causare un errore di sintassi

mio IDE (PhpStorm) rilevato l'errore, ma non ha fornito alcun contesto utile per correzione. Il codice ha sicuramente prodotto un errore irreversibile includendo il file come modello.

avvertimento del pagina del manuale:


Warning Any output (including whitespace) between a switch statement and the first case will result in a syntax error. For example, this is invalid:

<?php switch ($foo): ?> 
    <?php case 1: ?> 
    ... 
<?php endswitch ?> 

Whereas this is valid, as the trailing newline after the switch statement is considered part of the closing ?> and hence nothing is output between the switch and case:

<?php switch ($foo): ?> 
<?php case 1: ?> 
    ... 
<?php endswitch ?> 

La pagina di manuale non offre alcuna spiegazione. Alcuni utenti comments on the page non spiegano nulla neanche; semplicemente ribadiscono che lo spazio bianco non è permesso.

Perché si tratta di un errore di sintassi?

+6

Almeno a parer mio, una domanda come questa mi sembra "perché è' == 'usato per il confronto", la risposta è solo "perché la sintassi è definita in questo modo" ... –

+0

Immagino che sia vero , ma la ragione per l'operatore di confronto è che la lingua ne ha bisogno. Qual è la ragione di questa qualità della sintassi? –

+1

La risposta breve è perché si tratta di un errore di sintassi. Ma la lunghezza della stringa è troppo lunga e la precondizione è la teoria degli automi. – ern

risposta

12

Lo è.

Si tratta di un errore di sintassi per la stessa ragione che si tratta:

<?php 

$foo = 1; 
switch ($foo) { 
?> 
    This can't be here. 
    <?php 
    case 1: 
     echo "I'm one"; 
     break; 
    case 2: 
     echo "I'm two"; 
     break; 
} 

Questo si traduce in:

[27-Jan-2016 22:21:08 Europe/Berlin] PHP Parse error: syntax error, unexpected ' This can't be here.', expecting case (T_CASE) or default (T_DEFAULT) or '}' in /path/file on line 7

L'unica cosa che può seguire un switch è un case. È proprio come funziona la lingua.

La limitazione specifica per gli spazi bianchi con la sintassi alternativa è una delle ragioni per cui è l'alternativa sintassi : il risultato e 'la formattazione brutto e manca di rientro in cui normalmente ci si aspetterebbe di vederlo.

+2

L'esempio di non spazio bianco lo rende sicuramente meno pazzo. È che il tuo esempio equivale a 'switch ($ foo) { echo 'Questo non può essere qui.'; caso: .... '? –

+3

@SethBattin Esattamente. È essenzialmente lo stesso problema. –

+0

Abbastanza giusto. Grazie per la risposta. –

Problemi correlati