Aby zamknąć lub nie zamknąć php

14

Przeczytałem, że zaleca się (szczególnie w przypadku php 7), aby nie zamykać plików php za pomocą ?>

Wiele moich plików php WP kończy się tak:

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

Czy powinienem usunąć tag zamykający i mieć coś takiego?

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

na końcu moich plików?

IXN
źródło
2
Jeśli nie ma nic po niezamkniętym tagu php, jest to całkowicie w porządku, jak zauważyłem w wielu frameworkach, takich jak Laravel, nie zamykają tagu php na końcu plików, a przy okazji, podstawowe pliki WordPress również działały tak samo wzorca i nie zamyka tagu php na końcu, więc myślę, że powinniśmy przestrzegać stylu kodowania WordPressa, a nie ich zamykać.
Amirmasoud,
1
Prawdopodobnie powiązany bilet na trac: # 10633
Sven

Odpowiedzi:

19

Tak, unikaj zamykania tagów PHP na końcu pliku, nie tylko w PHP 7, ale także w PHP 5.

Powodem jest to, że jeśli zamkniesz tag, wszystko, co następuje po tagu, nawet pusta linia, zostanie wysłane do wyjścia i spowoduje, że PHP wyśle ​​nagłówki, a także uniemożliwi ustawienie pliku cookie, przekierowanie do pracy, poprawność kanału, i tak dalej.

Chyba kiedykolwiek spotkałeś się z taką wiadomością

Nie można modyfikować informacji nagłówka - nagłówki już wysłane przez (wyjście rozpoczęte o ...) w ... on line ...

?>Przyczyną może być zamknięcie pliku na końcu.

gmazzap
źródło
1
Uważam, że to poprawna odpowiedź. Nawet podkreślenia , z których pierwotnie otrzymałem mój szablon, usunęły tag zamykający w najnowszej aktualizacji.
IXN
@IXN Jest to poprawne, jeśli cały plik to PHP i dlatego składa się z jednego bloku kodu PHP (blok kodu PHP jest domyślnie zamknięty na końcu pliku). Jednakże, jeśli masz wiele bloków kodu PHP i mieszasz HTML i PHP, jak sugeruje przykład w twoim pytaniu, powinieneś jawnie zamknąć blok kodu PHP, jak stwierdza TheDeadMedic w swojej odpowiedzi.
MrWhite,
Myślę, że jedynym wyjątkiem jest to, że po ostatnim bloku kodu php następuje html. Ale jeśli ostatnie symbole w pliku są?> Można / należy je pominąć. Tak przynajmniej rozumiem.
IXN
Głównym powodem pominięcia (lub włączenia) zamykającego znacznika PHP jest uniknięcie wprowadzania niemądrych błędów podczas programowania. Jak wspomniano powyżej, w przypadku całego pliku PHP może to zapobiec przypadkowemu wyjściu, powodującemu błąd. W przypadku pliku, który już miesza dane wyjściowe HTML i PHP, nie może to spowodować błędu. Jednak pominięcie zamykającego znacznika PHP w tym drugim przypadku może potencjalnie wprowadzić błędy, ponieważ musisz teraz pamiętać o jawnym zamknięciu znacznika PHP przed dodaniem końcowej zawartości HTML - nie jest to coś, co robisz w pliku kodu w całości PHP.
MrWhite,
Jeśli przejrzysz źródło WP, zobaczysz, że (większość) PHP zawiera pominięcie końcowego znacznika PHP. Jednak pliki szablonów (które mieszają bloki kodu HTML i PHP) zawsze zawierają zamykający znacznik PHP.
MrWhite,
11

Biorąc pod uwagę twój przykład, zachowałbym tag zamykający, tj. Wywołania funkcji w jednym wierszu w szablonie. Jest spójny i poprawia przejrzystość (w ten sam sposób WordPress zaleca końcowe przecinki dla tablic ) - w przeciwnym razie wyobraź sobie, że nie-programista podniósł twój plik i zaczął go dodawać:

<?php get_footer();

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

Jednak w przypadku wszystkich innych plików (funkcji, obejmuje itp.) Porada jest zdecydowanie dobrym pomysłem:

<?php // Start of file

class MY_Class {
    function just_do_it() {
    }
}

// Bye bye closing tag

Uważam, że jest czystszy i, jak wspomnieli inni, nie ma ryzyka, że ​​przerażające „nagłówki już zostały wysłane”.

TheDeadMedic
źródło