Có rất nhiều "Tại sao PHP đưa ra lỗi ở đây?" câu hỏi. Vâng, đây là một chút khác nhau. Tôi thấy đoạn mã sau khi làm lại một số mã được viết bởi một đồng nghiệp:tại sao PHP không ném lỗi phân tích cú pháp?
foreach($arr as $key => $value) {http://google.com/
echo $value;
// ...
}
Suy nghĩ đầu tiên của tôi: "Umm ... làm thế nào lúng túng, ông hẳn đã vô tình dán mà ở đó ...", tiếp theo: "Chờ ... không có cách nào mã này thực sự chạy ... mà nên là một lỗi cú pháp ". Chưa hết:
$ php -l test.php
No syntax errors detected
Và quả thực, (như rất nhiều mã PHP mà dường như không nên chạy) nó chạy trong sản xuất mà không gặp rắc rối. Vì vậy, tôi đã làm một thử nghiệm nhỏ:
foreach($arr as $key => $value) {http://google.com/ <-- original, no error
foreach($arr as $key => $value) {http: <-- also no syntax error
foreach($arr as $key => $value) {http <-- bingo! "Unexpected T_ECHO..."
Điều gì nhỏ nhặt của ngữ pháp của PHP là tạo ra kết quả lạ như vậy?
(Tôi đang sử dụng PHP 5.3.5)
'http:' là nhãn và '//' là nhận xét. Tôi đã nhìn thấy thủ thuật này trước đây. – Borealid
Tất nhiên. Tôi không biết PHP có 'goto'. Khôn lanh. – chesles
Ugh. Một mục khác trên "lý do tại sao * địa ngục * đã làm tính năng ảm đạm này phải được thực hiện trong một ngôn ngữ đã được cưỡi với các tính năng câm?" danh sách. –