2012-02-13 1 views
6

tôi gỡ lỗi một số mã cho một khách hàng và tìm thấy cú pháp sau:Nửa dấu chấm phẩy sau một trường hợp hợp lệ trong câu lệnh chuyển đổi PHP?

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

trường hợp Báo cáo kết thúc trong dấu chấm phẩy chứ không phải là dấu hai chấm. Hóa ra điều này không biên dịch, nhưng nó là hợp pháp? Tôi chưa bao giờ thấy cú pháp đó trước đây.

+1

@LeviMiết không, bạn sẽ không. Không có logic nào ở đây có thể được hiểu một cách hợp lý; PHP chỉ tự ý cho phép một dấu chấm phẩy sau một trường hợp thay vì dấu hai chấm vì một lý do nào đó. Cú pháp tương tự là một lỗi trong C. –

Trả lời

12

Từ documentation:

Có thể sử dụng một dấu chấm phẩy thay vì một dấu hai chấm sau một trường hợp như thế:

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

Yup, chỉ chừng nào $i có một giá trị số

+0

Không, nó vẫn hoạt động. 'true' = 1; 'false' = 0; '" string "' = 0; Chỉ '$ i = mảng ('cái gì đó')' sẽ không in bất cứ thứ gì. Nhưng nó sẽ không đưa ra bất kỳ lỗi nào cả. – Shoe

+0

tôi cũng nên được một chút về phía trước với nó, tôi đã ngụ ý nó có thể là một chuỗi hoặc giá trị int được thông qua. Xin lỗi vì sự lựa chọn của tôi về các từ =) – Eli

+0

Nó thực sự hoạt động với mọi thứ, thậm chí là 'NULL'. Với nul hoặc một tập không '$ i' nó sẽ in 0. – Shoe

-1

Như bạn có thể kiểm tra ở đây, nó hoạt động: http://codepad.org/hOLQP98D tôi nghĩ rằng nó hoạt động vì nó rơi qua

+0

-1; điều này không liên quan gì đến việc thông qua. Bạn chỉ được phép sử dụng dấu chấm phẩy thay vì dấu hai chấm sau một trường hợp, bởi vì vì lý do nào đó, các nhà phát triển PHP đã quyết định thực hiện theo cách đó. –