416 Stimmen

Warum sollte man das Close-Tag weglassen?

Ich lese immer wieder, dass es schlechte Praxis ist, den PHP-close-Tag zu verwenden ?> am Ende der Datei. Das Kopfzeilenproblem scheint in folgendem Zusammenhang irrelevant zu sein (und dies ist bisher das einzige gute Argument):

Moderne PHP-Versionen setzen das output_buffering-Flag in php.ini Wenn die Ausgabepufferung aktiviert ist, können Sie HTTP-Header und Cookies nach der HTML-Ausgabe setzen, da der zurückgegebene Code nicht sofort an den Browser gesendet wird.

Jedes gute Praxisbuch und jedes Wiki beginnt mit dieser "Regel", aber niemand liefert gute Gründe dafür. Gibt es einen weiteren guten Grund, den abschließenden PHP-Tag auszulassen?

4voto

Frosty Z Punkte 21220

Profis

Nachteile

Schlussfolgerung

Ich würde sagen, dass die Argumente, die für das Weglassen des Tags sprechen, überzeugender sind (man vermeidet große Kopfschmerzen mit header() + es ist PHP/Zend "Empfehlung"). Ich gebe zu, dass dies nicht die "schönste" Lösung ist, die ich je gesehen habe, was die Konsistenz der Syntax betrifft, aber was könnte besser sein?

2voto

mip Punkte 7905

Da meine Frage als Duplikat dieser Frage markiert wurde, denke ich, dass es in Ordnung ist, zu posten, warum NICHT Schließender Tag weglassen ?> kann aus einigen Gründen erwünscht sein.

  • Mit vollständigen Verarbeitungsanweisungen Syntax ( <?php ... ?> ) Die PHP-Quelle ist ein gültiges SGML-Dokument, das ohne Probleme mit einem SGML-Parser geparst und verarbeitet werden kann. Mit zusätzlichen Einschränkungen kann es auch gültiges XML/XHTML sein.

Nichts hindert Sie daran, gültigen XML/HTML/SGML-Code zu schreiben. PHP-Dokumentation ist sich dessen bewusst. Auszug:

Hinweis: Beachten Sie auch, dass Sie bei der Einbettung von PHP in XML oder XHTML die < ?php ?> Tags verwenden müssen, um den Standards zu entsprechen.

Natürlich ist die PHP-Syntax nicht strikt SGML/XML/HTML und Sie erstellen ein Dokument, das nicht SGML/XML/HTML ist, so wie Sie HTML in XHTML umwandeln können, um XML-konform zu sein oder nicht.

  • Irgendwann möchten Sie vielleicht Quellen miteinander verknüpfen. Dies wird nicht so einfach sein wie die einfache Ausführung von cat source1.php source2.php wenn Sie Unstimmigkeiten haben, die durch das Weglassen der Schließung ?> Tags.

  • Ohne ?> ist es schwieriger festzustellen, ob das Dokument im PHP-Escape-Modus oder im PHP-Ignoriermodus belassen wurde (PI-Tag <?php kann geöffnet worden sein oder nicht). Das Leben ist einfacher, wenn Sie Ihre Dokumente konsequent im PHP-Ignoriermodus lassen. Es ist wie bei der Arbeit mit gut formatierten HTML-Dokumenten im Vergleich zu Dokumenten mit ungeschlossenen, schlecht verschachtelten Tags usw.

  • Es scheint, dass einige Editoren wie Dreamweaver Probleme mit PI haben, wenn es geöffnet bleibt [1] .

0voto

Ruz Punkte 246

Wenn ich die Frage richtig verstehe, geht es um die Ausgabepufferung und die Auswirkungen, die dies auf das Schließen/Ende von Tags haben könnte. Ich bin mir nicht sicher, ob diese Frage wirklich berechtigt ist. Das Problem ist, dass der Ausgabepuffer nicht bedeutet, dass der gesamte Inhalt im Speicher gehalten wird, bevor er an den Client gesendet wird. Es bedeutet, dass ein Teil des Inhalts gespeichert wird.

Der Programmierer kann absichtlich den Puffer oder den Ausgabepuffer leeren. Ändert die Option des Ausgabepuffers in PHP wirklich etwas daran, wie sich der schließende Tag auf die Codierung auswirkt? Ich würde sagen, das tut sie nicht.

Und vielleicht ist das der Grund, warum die meisten Antworten auf den persönlichen Stil und die Syntax zurückgingen.

0voto

Daniele Cruciani Punkte 583

Es gibt 2 Möglichkeiten für die Verwendung von php-Code:

  1. PHP-Code wie z. B. Klassendefinition oder Funktionsdefinition
  2. Verwendung von PHP als Vorlagensprache (z. B. in Ansichten)

im Fall 1. ist der schließende Tag völlig unbrauchbar, außerdem würde ich gerne nur 1 (ein) php open Tag und KEINEN (null) schließenden Tag in einem solchen Fall sehen. Dies ist eine gute Praxis, da es den Code sauber macht und die Logik von der Präsentation trennt. Für den Präsentationsfall (2.) fanden einige es natürlich, alle Tags zu schließen (auch die von PHP verarbeiteten), was zu Verwirrung führt, da PHP eigentlich 2 getrennte Anwendungsfälle hat, die nicht vermischt werden sollten: Logik/Berechnung und Präsentation

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X