Để đóng hoặc không đóng php


14

Tôi đã đọc được khuyến cáo (đặc biệt là với php 7) không nên đóng các tệp php với ?>

Nhiều tệp WP php của tôi kết thúc như thế này:

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Tôi có nên xóa thẻ đóng và có cái gì đó như thế này không

<?php get_sidebar(); ?>
<?php get_footer(); 

ở cuối tập tin của tôi?


2
Nếu không có gì sau thẻ php không đóng của bạn thì nó hoàn toàn ổn, như tôi đã quan sát trong nhiều khung như Laravel, họ không đóng thẻ php ở cuối các tệp và nhân tiện, các tệp lõi WordPress cũng tuân theo như vậy cuối cùng và không đóng thẻ php, vì vậy tôi nghĩ chúng ta nên theo phong cách mã hóa WordPress và không đóng chúng.
Amirmasoud 4/12/2015

1
Vé có thể liên quan trên trac: # 10633
Sven

Câu trả lời:


19

Có, vui lòng tránh đóng các thẻ PHP ở cuối tệp, không chỉ với PHP 7, mà còn với PHP 5.

Lý do là nếu bạn đóng thẻ, mọi thứ nằm sau thẻ, thậm chí là một dòng trống, sẽ được gửi đến đầu ra và sẽ khiến PHP gửi tiêu đề cũng như ngăn chặn cookie được đặt, chuyển hướng để hoạt động, nguồn cấp dữ liệu hợp lệ, và như thế.

Tôi đoán rằng bạn đã từng gặp một tin nhắn như

Không thể sửa đổi thông tin tiêu đề - các tiêu đề đã được gửi bởi (đầu ra bắt đầu từ ...) trong ... trên dòng ...

Việc đóng ?>ở cuối tập tin có thể là nguyên nhân.


1
Tôi tin rằng đây là câu trả lời chính xác. Ngay cả Underscores , nơi ban đầu tôi lấy mẫu của mình, đã xóa thẻ đóng trong bản cập nhật mới nhất.
IXN

@IXN Điều này đúng nếu toàn bộ tệp là PHP và do đó bao gồm một khối mã PHP duy nhất (khối mã PHP được đóng hoàn toàn ở cuối tệp). Tuy nhiên, nếu bạn có nhiều khối mã PHP và đang trộn HTML và PHP, như được ngụ ý trong ví dụ trong câu hỏi của bạn, thì bạn nên đóng rõ ràng khối mã PHP, như câu trả lời của TheDeadMedic.
MrWhite

Tôi nghĩ ngoại lệ duy nhất là nếu khối mã php cuối cùng được theo sau bởi html. Nhưng nếu các ký hiệu cuối cùng trên tệp là?> Chúng có thể / nên được bỏ qua. Hay để tôi hiểu.
IXN

Lý do chính để bỏ qua (hoặc bao gồm) thẻ PHP đóng là để tránh đưa ra các lỗi ngớ ngẩn trong quá trình phát triển. Như đã đề cập ở trên, đối với một tệp PHP hoàn toàn, điều này có thể tránh đầu ra vô tình dẫn đến lỗi. Đối với một tệp đã trộn đầu ra HTML và PHP, điều này không thể dẫn đến lỗi. Tuy nhiên, thiếu sót của thẻ PHP đóng trong trường hợp thứ hai này có khả năng gây ra lỗi, vì bây giờ bạn phải nhớ đóng rõ ràng thẻ PHP trước khi thêm nội dung HTML theo dõi - đây không phải là điều bạn làm trong toàn bộ tệp mã PHP.
MrWhite

Nếu bạn xem qua nguồn WP, bạn sẽ thấy (hầu hết) PHP bao gồm việc bỏ qua thẻ PHP. Tuy nhiên, các tệp mẫu (trộn các khối mã HTML và PHP) luôn bao gồm thẻ PHP đóng.
MrWhite

11

Cho ví dụ cụ thể của bạn, tôi sẽ giữ thẻ đóng tức là các cuộc gọi hàm một dòng trong một mẫu. Nó nhất quán và hỗ trợ sự rõ ràng (giống như cách WordPress khuyên dùng dấu phẩy cho mảng ) - nếu không hãy tưởng tượng nếu một người không phải là nhà phát triển nhặt tệp của bạn và bắt đầu thêm vào nó:

<?php get_footer();

<div>What the hell am I doing wrong?</div>

Tuy nhiên, đối với tất cả các tệp khác (chức năng, bao gồm, v.v.), lời khuyên chắc chắn là một ý tưởng tốt:

<?php // Start of file

class MY_Class {
    function just_do_it() {
    }
}

// Bye bye closing tag

Tôi thấy nó sạch hơn, và như những người khác đã đề cập, không có nguy cơ "tiêu đề đã được gửi" đáng sợ.

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.