2016-01-27 23 views
6

Niedawno napotkał błąd składni oświadczenie przełącznik opisany w http://php.net/manual/en/control-structures.alternative-syntax.phpDlaczego wyjście w instrukcji switch alternate-składni spowodować błąd składni

mojego IDE (phpstorm) wykryto błąd, ale nie podała żadnych użytecznych kontekst do korekty. Kod z pewnością spowodował błąd krytyczny podczas dołączania pliku jako szablonu.

ostrzeżenie stronę podręcznika użytkownika:


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 ?> 

Strona podręcznik oferuje żadnych wyjaśnień. Jakiś użytkownik comments on the page również niczego nie wyjaśnia; po prostu powtarzają, że białe spacje są niedozwolone.

Dlaczego jest to błąd składniowy?

+6

Przynajmniej moim zdaniem, takie pytanie brzmi dla mnie "dlaczego jest' == "używane do porównania", odpowiedź brzmi "ponieważ składnia jest zdefiniowana w ten sposób" ... –

+0

Myślę, że to prawda , ale powodem dla operatora porównania jest to, że język go potrzebuje. Jaki jest powód tej jakości składni? –

+1

Krótka odpowiedź brzmi, ponieważ błąd składni it'a. Ale długi czas oczekiwania będzie zbyt długi, a warunkiem wstępnym jest teoria automatów. – ern

Odpowiedz

12

Po prostu jest.

Jest to błąd składni z tego samego powodu, że jest to:

<?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; 
} 

Wynika to z:

[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

Jedyną rzeczą, która może postępować zgodnie ze switch jest case. Tak właśnie działa język.

Ograniczenie odstępy specyficzne ze składnią alternatywą jest jednym z powodów jest to, że alternatywny składni: skutkuje brzydkiego formatowania i nie ma wgłębienie, w którym można by oczekiwać, aby zobaczyć.

+2

Przykład braku odstępu na pewno sprawia, że ​​wydaje się mniej szalony. Czy Twój przykład jest równoznaczny z 'switch ($ foo) { echo" To nie może tu być. "; sprawa: ....? –

+3

@SethBattin Dokładnie. Zasadniczo jest to ten sam problem. –

+0

Wystarczająco fair. Dziękuję za odpowiedź. –

Powiązane problemy