Tag zamykający (?>) W plikach PHP?

17

Niektórzy przysięgają, że zamykają swoje pliki PHP ?>, inni twierdzą, że lepiej jest je wyłączyć.

Wiem, że nie jest to konieczne, po prostu zastanawiam się, jakie są zalety i wady robienia tego i jaka jest najlepsza praktyka.

Steve Robbins
źródło
Niektóre osoby zakładają, że wyrażenie „bardziej zoptymalizowany” miało oznaczać „będzie działać szybciej”. Mówca (którego pierwszym językiem może nie być angielski) mógł mieć na myśli coś bardziej „bardziej optymalnego” lub „lepszą praktykę”.
Scott C Wilson

Odpowiedzi:

27

Nie jest to tak bardzo kwestia wydajności - analizowanie końcowego ?>jest trywialne i nie zrobi żadnej zauważalnej różnicy, chyba że podasz milion plików na sekundę.

IIRC, php.net NIE zaleca dodawania ?>, a powody są następujące:

  • to niepotrzebne
  • łatwo jest przypadkowo dodać znaczną spację po ?>, która zostanie wyprowadzona do klienta, co z kolei może prowadzić do niejasnych błędów „już wysłanych nagłówków” (dzieje się tak, gdy dołączony plik zawiera spacje, a Ty próbujesz ustawić nagłówek po w tym ten plik)
tdammers
źródło
Na podstawie odpowiedzi tutaj (szczególnie dotyczących pustych niechcianych białych znaków powodujących błędy „nagłówki już wysłane”) zmieniłem swój nawyk religijnego dołączania?> Na końcu pliku PHP. Zauważyłem, kiedy utworzyłem nowy plik za pomocą PHPStorm, szablon właśnie wstawił <? Php bez znacznika zamykającego?> I pomyślałem, że to po prostu niechlujne kodowanie. Teraz wiem lepiej.
tcrosley,
Ten właśnie powód - „nagłówki już wysłane” - był powodem, dla którego został to surowo zabronione przez mojego pracodawcę (duży portal internetowy). To jedno, gdy zapomnisz go na końcu właśnie zapisanego pliku. Innym jest, jeśli edytujesz pozycję biblioteki, która zawiera 3 głębokie, twój edytor tekstowy wstawia białe znaki bez twojej wiedzy i nagle kawałek portalu prowadzonego przez facetów w odległości 2 budynków przestaje działać. Drzewo zawiera często ponad 100 plików, znalezienie błędu staje się ćwiczeniem z cierpliwością. Oczekuj wizyty „głębokiej wdzięczności” tygodnie później, gdy błąd zostanie znaleziony i wyśledzony.
SF.
1
PHP wysyłające białe znaki po tagu zamykającym jest kolejnym przykładem złych decyzji językowych.
user949300,
12

Nie, są w błędzie.

?>jest opcjonalny w PHP na końcu pliku. I znajdziesz dobry powód. Najważniejsze jest to, że puste miejsce na końcu pliku nie uniemożliwi wysyłania nagłówków. Jest to trudny błąd do wykrycia, ponieważ można go znaleźć w dowolnym pliku w dowolnym miejscu.

Zwykłym sposobem jest umieszczenie zamykającego znacznika, gdy PHP jest mieszane z HTML, a nie umieszczanie go dla czystych plików PHP. To nawet standard kodowania z frameworka ZEND i wielu innych.

Zoptymalizowany oznacza, że ​​kod działa szybciej. Łatwo jest udowodnić, że się mylą. Profiluj kod i dowiedz się, że to bzdury.

deadalnix
źródło
4

Myślę, że zaleca się początkującym, aby nie dodawali go, aby nie spowodowali przypadkowego wysłania dodatkowych znaków nowej linii. Ponieważ nie jest tak ważne, jak to wspomniałeś, myślę, że ogólne rozumowanie jest takie, że lepiej zostaw to, aby uniknąć błędów.

Nie sądzę, żeby była z tym jakaś „optymalizacja”.

Chciałbym wskazać tutaj: /programming/4410704/php-closing-tag i tutaj: /programming/3219383/hy-do-some-scripts-omit-the -closing-php-tag

manojlds
źródło
1
początkujący czy nie ... po prostu nie ma powodu (z wyjątkiem przypadków OCD), aby je mieć
Mchl
@Mchl Chciałbym podkreślić, że powody opuszczania off są dość trywialne i w końcu po prostu sprowadza się do preferencji programisty i jego naprawdę nie problem OCD ...
Kenneth
1
Kulę się za każdym razem, gdy widzę ?>w plikach zawierających czysty PHP.
Caffeinated Aviator,
@Kenneth: Jeśli są trywialne - ich nie widzę. Część OCD miała być żartem.
Mchl,