2010-12-13 2 views
5

Mögliche Duplizieren:
PHP closing tagWas hat den Vorteil, dass ein abschließendes `?>` -Tag in einer PHP-Klassendatei nicht enthalten ist?

ich viele PHP-Klassen-Dateien gesehen haben, die ?> so statt dies keine Schließung haben:

<?php 
class DataTypeLine extends DataType { 
    ... 
} 
?> 

sie haben nur diese :

<?php 
class DataTypeLine extends DataType { 
    ... 
} 

Ich bemerke auch, wenn ich eine neue PHP-Datei in Eclipse Helios erstellen, wird standardmäßig ein Start nur <?php Tag aber kein End-Tag?> zu haben.

Was hat den Vorteil, dass keine Endung ?> hat?

Antwort

8

Kein wirklicher Vorteil - es stellt sicher, dass es keine unbeabsichtigten Leerzeichen gibt, die durch Hinzufügen neuer Zeilen am Ende der Datei ausgegeben werden, die Dinge wie das Senden von Kopfzeilen und dergleichen stören können.

Zum Beispiel kann eine Datei wie folgt:

<?php 
    /* do stuff */ 
?> 

<!-- note the empty space above, this comment not really part of the code --> 

wird eine Datei brechen, die es wie diese

<?php 
    require 'myfile.php'; 
    header('Location: http://example.com/'); 
?> 

verwendet mit Ausgang bereits Fehler gesendet, weil diese Leerzeilen in der ersten Datei . Indem Sie das ?> nicht verwenden, vermeiden Sie dieses potenzielle Problem.

+0

Könnten Sie bitte erklären, warum der Platz zu Fehlern führen kann? – lvarayut

+0

Probieren Sie es aus! Beispiel wird immer ein Fehler sein –

1

Es ist eine Kodierung Stil Empfehlung für Anfänger. PHP isst eine einzelne \n nach dem schließenden Tag. Doch viele Neuankömmlinge hinterlassen versehentlich zusätzliche Leerzeichen oder Tabulatoren oder mehrere Zeilenumbrüche. Unter Windows ist dies mit einem \r\n trail das schließende Tag ?> verbunden, was zu isses führt, sobald Skripte auf Unix-Servern bereitgestellt werden.

Das Schließen des schließenden Tags wird auch als Optimierung durch einige (wie einfache Anführungszeichen) verstanden.

5

Von den PHP documentation

Der End-Tag eines PHP-Blöcke am Ende einer Datei ist optional und in einigen Fällen Weglassen ist es hilfreich, wenn mit include() oder require() , so unerwünschte Leerzeichen bei das Ende der Dateien nicht auftreten, und Sie werden immer noch in der Lage sein, Header zur Antwort später hinzuzufügen. Es ist auch praktisch, wenn Sie Ausgabepufferung verwenden, und nicht möchten, dass hinzugefügt unerwünschte Leerzeichen bei das Ende der Teile, die von den enthaltenen Dateien generiert werden.

Verwandte Themen