ScotlandPHP

PHP Tags

Wenn PHP eine Datei parst, schaut es nach öffnenden und schließenden Tags, also <?php und ?>, die PHP anweisen, das Interpretieren des zwischenliegenden Codes zu beginnen bzw. zu beenden. Auf diese Weise zu parsen ermöglicht die Einbettung von PHP in allen möglichen unterschiedlichen Dokumenten, da alles außerhalb eines Paares von öffnenden und schließenden Tags vom PHP Parser ignoriert wird.

PHP erlaubt ebenfalls kurze öffnende Tags <? (von denen abgeraten wird, da sie nur verfügbar sind, wenn sie durch die short_open_tag php.ini Konfigurationsdirektive aktiviert wurden, oder PHP mit der --enable-short-tags Option konfiguriert wurde).

Ist eine Datei reiner PHP-Code, ist es besser den schließenden PHP-Tag am Ende der Datei wegzulassen. Das verhindert, dass versehentlich Whitespace oder Zeilenumbrüche nach dem schließenden PHP-Tag hinzugefügt werden, die unerwünschte Auswirkungen haben können, da PHP das Puffern der Ausgabe beginnt, auch wenn der Programmierer keinerlei Absicht hatte, irgendwelche Ausgaben an dieser Stelle des Scripts zu senden.

<?php
echo "Hallo Welt";

// ... mehr Code

echo "Letzte Anweisung";

// das Script endet hier ohne schließenden PHP-Tag

Changelog
Version Beschreibung
7.0.0 Die ASP-Tags <%, %>, <%=, und der Script-Tag <script language="php"> wurden von PHP entfernt.
5.4.0 Der Tag <?= ist immer verfügbar, unabhängig von der short_open_tag ini Einstellung.

add a note add a note

User Contributed Notes 3 notes

up
1
crazytonyi at gmail dot com
1 year ago
Regarding earlier note by @purkrt :

> I would like to stress out that the opening tag is "<?php[whitespace]", not just "<?php"

This is absolutely correct, but the wording may confuse some developers less familiar with the extent of the term "[whitespace]".

Whitespace, in this context, would be any character that generated vertical or horizontal space, including tabs ( \t ), newlines ( \n ), and carriage returns ( \r ), as well as a space character ( \s ). So reusing purkrt's example:

<?php/*blah*/ echo "a"?>

would not work, as mentioned, but :

<?php /*php followed by space*/ echo "a"?>

will work, as well as :

<?php
/*php followed by end-of-line*/ echo "a"?>

and :

<?php    /*php followed by tab*/ echo "a"?>

I just wanted to clarify this to prevent anyone from misreading purkrt's note to mean that a the opening tag --even when being on its own line--required a space ( \s ) character. The following would work but is not at all necessary or how the earlier comment should be interpreted :

<?php
/*php followed by a space and end-of-line*/ echo "a"?>

The end-of-line character is whitespace, so it is all that you would need.
up
-12
purkrt at gmail dot com
2 years ago
I would like to stress out that the opening tag is "<?php[whitespace]", not just "<?php". While this might seem blatantly obvious, I thought for some time that

<?php/*blah*/ echo "a"?>

would work, and it does not; the comment does not work as whitespace. I've run into this while converting some older code with short open tag.
up
-326
alexander dot podgorny at somewhere dot com
3 years ago
One reason to use long tags over short is to avoid confusion with <?xml ?> notation.
To Top