Tag (?>) Für PHP-Dateien schließen?

17

Einige Leute schwören darauf, ihre PHP-Dateien mit zu schließen ?>, andere sagen, es sei besser, es wegzulassen.

Ich weiß, dass es nicht unbedingt erforderlich ist, es dort zu haben. Ich frage mich nur, was die Vor- und Nachteile sind und welche bewährten Methoden dies sind.

Steve Robbins
quelle
Einige Leute gehen davon aus, dass der Ausdruck "optimierter" "schneller laufen" bedeuten soll. Der Sprecher (dessen Muttersprache möglicherweise nicht Englisch ist) hat möglicherweise eher etwas "Optimaleres" oder "Besseres" gemeint.
Scott C Wilson

Antworten:

27

Es ist nicht so sehr eine Frage der Leistung - das Parsen des Trailings ?>ist trivial und macht keinen nennenswerten Unterschied, es sei denn, Sie fügen eine Million Dateien pro Sekunde hinzu.

IIRC, php.net empfiehlt, NICHT das hinzuzufügen ?>, und die Gründe gehen ungefähr so:

  • es ist unnötig
  • Es ist leicht, versehentlich signifikante Whitespaces nach dem hinzuzufügen ?>, die an den Client ausgegeben werden, was wiederum zu undurchsichtigen Fehlern bei bereits gesendeten Headern führen kann (dies passiert, wenn eine enthaltene Datei Whitespace enthält und Sie versuchen, danach einen Header zu setzen einschließlich dieser Datei)
tdammers
quelle
Aufgrund der hier gegebenen Antworten (insbesondere in Bezug auf die leeren, unerwünschten Leerzeichen, die "bereits gesendete Header" -Fehler verursachen) habe ich meine Angewohnheit geändert, religiös ein?> Am Ende einer PHP-Datei einzufügen. Als ich mit PHPStorm eine neue Datei erstellte, bemerkte ich, dass die Vorlage gerade ein <? Php ohne das?> Schließende Tag einfügte und dachte, es sei nur eine schlampige Codierung. Jetzt weiß ich es besser.
Tcrosley
Dieser genaue Grund - "bereits gesendete Header" - war der Grund, warum dies von meinem Arbeitgeber (einem großen Webportal) strengstens verboten wurde. Es ist eine Sache, wenn Sie es am Ende einer Datei vergessen, die Sie gerade geschrieben haben. Wenn Sie einen Bibliothekseintrag mit einer Tiefe von 3 Includes bearbeiten, fügt Ihr Texteditor das Leerzeichen ein, ohne dass Sie es merken, und plötzlich funktioniert ein Portal, das von zwei Gebäuden entfernt von Männern betrieben wird, nicht mehr. Der Baum der Includes besteht oft aus mehr als 100 Dateien. Das Auffinden des Fehlers wird zu einer Geduldsprobe. Erwarten Sie einen Besuch in "tiefer Dankbarkeit" Wochen später, wenn der Fehler gefunden und auf Sie zurückgeführt wird.
SF.
1
Das Versenden von Leerzeichen nach dem schließenden Tag durch PHP ist ein weiteres Beispiel für schlechte Sprachentscheidungen.
user949300
12

Nein, sie sind falsch.

?>ist optional in PHP am Ende einer Datei. Und Sie werden einen guten Grund dafür finden. Das wichtigste ist, dass ein leerer Bereich am Ende einer Datei Sie nicht daran hindert, Header zu senden. Dies ist ein schwer zu entdeckender Fehler, da Sie ihn in jeder beliebigen Datei finden können.

Die übliche Methode besteht darin, ein schließendes Tag zu setzen, wenn PHP mit HTML gemischt wird, und es nicht für reine PHP-Dateien. Es ist sogar ein Kodierungsstandard von ZEND Framework und vielen anderen.

Optimiert bedeutet, dass der Code schneller ausgeführt wird. Dies ist leicht zu beweisen, dass sie falsch liegen. Profiliere den Code und finde heraus, dass sie dir Bullshit erzählen.

deadalnix
quelle
4

Ich denke, es wird Neulingen empfohlen, das Hinzufügen zu vermeiden, damit keine zusätzlichen Zeilenumbrüche versehentlich gesendet werden. Da es nicht unbedingt erforderlich ist, es so zu haben, wie Sie es erwähnt haben, ist es meiner Meinung nach besser, es wegzulassen, um Fehler zu vermeiden.

Ich glaube nicht, dass damit eine "Optimierung" verbunden ist.

Ich würde Sie auf Folgendes verweisen: /programming/4410704/php-closing-tag und hier: /programming/3219383/why-do-some-scripts-omit-the -closing-php-tag

manojlds
quelle
1
Neulinge oder nicht ... es gibt einfach keinen Grund (mit Ausnahme von
Zwangsstörungen
@Mchl Ich möchte darauf hinweisen, dass die Gründe für das Aufhören ziemlich trivial sind und am Ende nur auf die Präferenz des Programmierers zurückzuführen sind und es sich nicht wirklich um ein OCD-Problem handelt ...
Kenneth
1
Ich erschrecke immer dann, wenn ich ?>Dateien sehe , die reines PHP enthalten.
Caffeinated Aviator
@Kenneth: Wenn sie trivial sind, kann ich sie nicht sehen. Der OCD-Teil war als Scherz gedacht.
Mchl