Thẻ đóng (?>) Trên tệp PHP?


17

Một số người thề bằng cách đóng các tệp PHP của họ ?>, một số người nói rằng nó được tối ưu hóa hơn để loại bỏ nó.

Tôi biết rằng không cần thiết phải có nó ở đó, tôi chỉ tự hỏi những ưu và nhược điểm của việc này là gì, và thực hành tốt nhất là gì.



Một số người cho rằng cụm từ "tối ưu hóa hơn" có nghĩa là "sẽ chạy nhanh hơn". Người nói (có ngôn ngữ đầu tiên có thể không phải là tiếng Anh) có thể có ý định gì đó như "tối ưu hơn" hoặc "thực hành tốt hơn".
Scott C Wilson

Câu trả lời:


27

Đây không phải là vấn đề hiệu suất - phân tích cú pháp ?>là không đáng kể và sẽ không tạo ra bất kỳ sự khác biệt đáng chú ý nào, trừ khi bạn bao gồm một triệu tệp mỗi giây.

IIRC, php.net khuyên KHÔNG nên thêm ?>và lý do diễn ra như sau:

  • nó không cần thiết
  • Thật dễ dàng để vô tình thêm khoảng trắng đáng kể sau ?>, sẽ là đầu ra cho máy khách, điều này có thể dẫn đến các lỗi 'tiêu đề đã gửi' tối nghĩa (điều này xảy ra khi một tệp được bao gồm có khoảng trắng và bạn cố gắng đặt tiêu đề sau bao gồm tập tin đó)

Dựa trên các câu trả lời ở đây (đặc biệt liên quan đến khoảng trắng không mong muốn trống rỗng gây ra lỗi "tiêu đề đã được gửi"), tôi đã thay đổi thói quen tôn giáo bao gồm một?> Ở cuối tệp PHP. Tôi nhận thấy khi tôi tạo một tệp mới bằng PHPStorm, mẫu chỉ chèn một thẻ <? Php mà không có thẻ đóng?> Và nghĩ rằng đó chỉ là mã hóa cẩu thả. Bây giờ tôi biết rõ hơn.
tcrosley

Lý do chính xác này - "tiêu đề đã được gửi" - là lý do điều này đã bị chủ nhân của tôi nghiêm cấm (một cổng thông tin web lớn). Đó là một điều khi bạn quên nó ở cuối tập tin bạn vừa viết. Sẽ khác nếu bạn chỉnh sửa mục nhập thư viện gồm 3 mục sâu, trình soạn thảo văn bản của bạn sẽ chèn khoảng trắng mà bạn không biết, và đột nhiên một phần cổng thông tin được điều hành bởi những kẻ ở cách đó 2 tòa nhà ngừng hoạt động. Cây bao gồm thường là hơn 100 tệp, việc tìm lỗi trở thành một bài tập trong sự kiên nhẫn. Mong đợi "lòng biết ơn sâu sắc" ghé thăm vài tuần sau khi lỗi được tìm thấy và truy tìm lại bạn.
SF.

1
PHP gửi khoảng trắng sau thẻ đóng là một ví dụ khác về các quyết định ngôn ngữ kém.
user949300

12

Không, họ sai.

?>là tùy chọn trong PHP ở cuối tệp. Và bạn sẽ tìm thấy lý do tốt cho việc này. Điều quan trọng nhất là một khoảng trống ở cuối tệp sẽ không ngăn bạn gửi tiêu đề. Đây là một lỗi khó phát hiện vì bạn có thể tìm thấy nó trong bất kỳ tệp nào ở bất cứ đâu.

Cách thông thường để làm là đặt một thẻ đóng khi PHP được trộn với HTML và không đặt nó cho các tệp PHP thuần túy. Nó thậm chí là một tiêu chuẩn mã hóa từ khung ZEND và nhiều thứ khác.

Tối ưu hóa có nghĩa là mã chạy nhanh hơn. Điều này là dễ dàng để chứng minh họ sai. Hồ sơ mã và tìm ra rằng họ đang nói với bạn nhảm nhí.


4

Tôi nghĩ rằng những người mới được khuyến nghị nên tránh thêm nó để họ không vô tình gửi thêm các ký tự dòng mới. Vì nó không cần thiết để có nó như bạn đã đề cập, tôi nghĩ lý do chung là tốt hơn nên bỏ nó đi để tránh sai lầm.

Tôi không nghĩ có bất kỳ "tối ưu hóa" nào liên quan đến nó.

Tôi sẽ chỉ cho bạn đến đây: /programming/4410704/php-closes-tag và tại đây: /programming/3219383/why-do-some-scripts-omit-the -closes-php-tag


1
người mới hay không ... đơn giản là không có lý do (ngoại trừ trường hợp OCD) để có chúng
Mchl

@Mchl Tôi sẽ chỉ ra rằng những lý do để rời đi là khá tầm thường và cuối cùng nó chỉ xuất phát từ sở thích của lập trình viên và nó không thực sự là một vấn đề OCD ...
Kenneth

1
Tôi co rúm bất cứ lúc nào tôi thấy ?>trong các tệp có chứa PHP thuần túy.
Aviator Caffein

@Kenneth: Nếu chúng tầm thường - Tôi không thể nhìn thấy chúng. Phần OCD có ý nghĩa như một trò đùa.
Mchl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.