2016-01-27 36 views
6

Gần đây tôi đã gặp phải những lỗi cú pháp câu lệnh switch được mô tả tại http://php.net/manual/en/control-structures.alternative-syntax.phpTại sao đầu ra trong một câu lệnh switch thay thế-cú pháp gây ra một lỗi cú pháp

My IDE (phpstorm) phát hiện ra lỗi, nhưng nó không cung cấp bất kỳ bối cảnh hữu ích để sửa chữa. Mã chắc chắn đã tạo ra lỗi nghiêm trọng khi bao gồm tệp dưới dạng mẫu.

cảnh báo Tài liệu hướng dẫn của trang:


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

Các trang hướng dẫn cung cấp không có lời giải thích. Một số người dùng comments on the page cũng không giải thích bất kỳ điều gì; họ chỉ đơn giản là restate rằng khoảng trắng không được phép.

Tại sao đây là lỗi cú pháp?

+6

Ít nhất theo ý kiến ​​của tôi, một câu hỏi như thế này nghe như "tại sao' == 'dùng để so sánh", câu trả lời chỉ là "vì cú pháp được định nghĩa theo cách đó" ... –

+0

Tôi đoán đó là sự thật , nhưng lý do cho toán tử so sánh là ngôn ngữ cần một ngôn ngữ. Lý do cho chất lượng cú pháp này là gì? –

+1

Câu trả lời ngắn là vì nó là lỗi cú pháp .. Nhưng anwser dài sẽ là quá dài và điều kiện tiên quyết là lý thuyết Automata .. – ern

Trả lời

12

Nó chỉ là.

Đó là một lỗi cú pháp với cùng lý do rằng đây là:

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

Điều này dẫn đến:

[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

Điều duy nhất có thể làm theo một switch là một case. Nó chỉ là cách ngôn ngữ hoạt động.

Giới hạn khoảng trắng đặc trưng với cú pháp thay thế là một trong những lý do mà nó các thay thế cú pháp: nó kết quả trong định dạng xấu xí và thiếu thụt đầu dòng một trong những nơi thường mong chờ để xem nó.

+2

Ví dụ không khoảng trắng chắc chắn làm cho nó có vẻ ít điên rồ. Có phải ví dụ của bạn tương đương với 'chuyển đổi ($ foo) { 'Không thể ở đây.'; trường hợp: .... '? –

+3

@SethBattin Chính xác. Đó chính là vấn đề tương tự. –

+0

Đủ công bằng. Cảm ơn câu trả lời. –

Các vấn đề liên quan