Znaczniki PHP

Kiedy PHP przetwarza plik, szuka otwierających i zamykających znaczników (tagów) (są nimi <?php i ?>), które mówią PHP o rozpoczęciu i zakończeniu interpretowania kodu pomiędzy nimi. Przetwarzanie w taki sposób pozwala zagnieżdzać PHP w dowolnym rodzaju dokumentów, ponieważ wszystko poza parą znaczników, otwierającym i zamykającym jest ignorowane przez parser PHP.

PHP pozwala także na użycie krótkiego tagu otwierającego <?, który jest niezalecane, ponieważ jest dostępne tylko gdy włączono go przez dyrektywę short_open_tag lub gdy PHP zostało skonfigurowane z opcją --enable-short-tags .

Jeżeli plik zawiera jedynie kod PHP, zaleca się pominięcie zamykającego tagu PHP na końcu pliku. Zapobiega to dodaniu przypadkowych białych znaków lub nowych linii dodanych po zamknięciu bloku PHP, co może spowodować niechciane efekty ponieważ PHP zacznie buforowanie wyjścia, gdy nie było to intencją programisty na tym etapie wykonywania skryptu.

<?php
echo "Witaj, świecie!";

// ... więcej kodu

echo "Ostatnie wyrażenie";

// skrypt kończy się w tym miejscu, bez tagu zamykającego PHP

Rejestr zmian
Wersja Opis
7.0.0 Tagi ASP <%, %>, <%= i tag skryptu <script language="php"> zostały usunięte z PHP.
5.4.0 Tag <?= jest zawsze dostępny, niezależnie od dyrektywy short_open_tag.

add a note add a note

User Contributed Notes 4 notes

up
2
crazytonyi at gmail dot com
4 years 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
-7
kuzawinski dot marcin at gmail dot com
11 months ago
New lines placed after PHP closing tags are ignored;

<?= "A"?>
B
<?= "C"?>

Output:
AB
C
up
-20
Mark Clements (kennel17.co.uk)
2 years ago
Closing PHP tags are recognised within single-line comments:

    <?php
   
// Code will end here ?> This is output as literal text.

    <?php
   
# Same with this method of commenting ?> This is output as literal text.

However they do not have an effect in C-style comments:

    <?php
   
/* Code will not end here ?> as closing tags are ignored inside C-style comments. */
   
?>
up
-26
pl at dot pl
1 year ago
Omit closing tag ?> always whenever you can

example:
<!DOCTYPE html><head>
<title><?php include'varia.php'; echo$title?></title>
</head><body></body></html>

varia.php
<?php
$title
= 'Welcome';
?>
[new line]        //other words: an extra 'Enter' is guilty
---------------

and you get:

Welcome - at the browser label

source won't tell you what happened - there will be fine:

<!DOCTYPE html><head>
<title>Welcome</title>
</head><body></body></html>

Now imagine, what else can go wrong because of it? Everything, as Murphy said.
And you will look for the answer why...? And where...?
It's just simplest example.
To Top