Um PHP zu schließen oder nicht zu schließen

14

Ich habe gelesen, dass es (besonders mit PHP 7) ratsam ist, die PHP-Dateien nicht mit zu schließen ?>

Viele meiner WP-PHP-Dateien enden so:

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

Sollte ich das schließende Tag entfernen und so etwas haben?

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

am Ende meiner Dateien?

IXN
quelle
2
Wenn es nach Ihrem nicht geschlossenen PHP-Tag nichts gibt, ist es völlig in Ordnung, wie ich in vielen Frameworks wie Laravel beobachtet habe, sie schließen das PHP-Tag nicht am Ende der Dateien, und übrigens folgten auch die WordPress-Kerndateien dem gleichen Muster und nicht das PHP-Tag am Ende geschlossen, so denke ich, sollten wir WordPress-Codierungsstil folgen und sie nicht schließen.
Amirmasoud
1
Eventuell passendes
Sven

Antworten:

19

Ja, bitte vermeiden Sie das Schließen von PHP-Tags am Ende der Datei, nicht nur mit PHP 7, sondern auch mit PHP 5.

Grund ist, dass, wenn Sie das Tag schließen, alles, was nach dem Tag steht, auch eine Leerzeile an die Ausgabe gesendet wird und PHP dazu veranlasst, Header zu senden und das Setzen von Cookies, die Weiterleitung an die Arbeit und die Gültigkeit des Feeds zu verhindern. und so weiter.

Ich vermute, dass Sie jemals auf eine Nachricht wie gestoßen sind

Header-Informationen können nicht geändert werden - Header, die bereits von (Ausgabe gestartet um ...) in ... online gesendet wurden ...

Ein Schließen ?>am Ende der Datei kann die Ursache sein.

gmazzap
quelle
1
Ich glaube das ist die richtige Antwort. Sogar Unterstriche , von denen ich ursprünglich meine Vorlage erhalten habe, haben das schließende Tag im letzten Update entfernt.
IXN,
@IXN Dies ist korrekt, wenn die gesamte Datei PHP ist und daher aus einem einzelnen PHP-Codeblock besteht (der PHP-Codeblock wird implizit am Ende der Datei geschlossen). Wenn Sie jedoch mehrere PHP-Codeblöcke haben und HTML und PHP mischen, wie im Beispiel in Ihrer Frage impliziert, sollten Sie den PHP-Codeblock explizit schließen, wie TheDeadMedic in seiner Antwort feststellt.
MrWhite
Ich denke, die einzige Ausnahme ist, wenn der letzte PHP-Code-Block von HTML gefolgt wird. Aber wenn die letzten Symbole in der Datei?> Sind, können / sollten sie weggelassen werden. Zumindest verstehe ich das.
IXN
Der Hauptgrund für das Weglassen (oder Einschließen) des schließenden PHP-Tags besteht darin, dumme Fehler während der Entwicklung zu vermeiden. Wie oben erwähnt, kann dies bei einer vollständigen PHP-Datei eine versehentliche Ausgabe verhindern, die zu Fehlern führt. Bei einer Datei, die bereits HTML-Ausgabe und PHP mischt, kann dies nicht zu Fehlern führen. Das Weglassen des schließenden PHP-Tags in diesem zweiten Fall kann jedoch zu Fehlern führen, da Sie jetzt daran denken müssen, das PHP-Tag explizit zu schließen, bevor Sie nachgestellten HTML-Inhalt hinzufügen. Dies geschieht nicht ausschließlich in PHP-Codedateien.
MrWhite
Wenn Sie die WP-Quelle durchsehen, werden Sie feststellen, dass (die meisten) PHP-Komponenten das nachfolgende PHP-Tag weglassen. Die Vorlagendateien (die HTML- und PHP-Codeblöcke mischen) enthalten jedoch immer das schließende PHP-Tag.
MrWhite
11

Anhand Ihres konkreten Beispiels würde ich das schließende Tag, dh einzeilige Funktionsaufrufe, in einer Vorlage belassen. Es ist konsistent und hilft bei der Übersichtlichkeit (in der gleichen Weise, in der WordPress nachgestellte Kommas für Arrays empfiehlt ).

<?php get_footer();

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

Für alle anderen Dateien (Funktionen, Includes usw.) ist der Hinweis jedoch auf jeden Fall eine gute Idee:

<?php // Start of file

class MY_Class {
    function just_do_it() {
    }
}

// Bye bye closing tag

Ich finde es sauberer, und wie andere schon erwähnt haben, besteht keine Gefahr, dass die gefürchteten "Header bereits gesendet" werden.

TheDeadMedic
quelle