php[world] 2018 - Call for Speakers

Etiquetas de PHP

Cuando PHP analiza un fichero, busca las etiquetas de apertura y cierre, que son <?php y ?>, y que indican a PHP dónde empezar y finalizar la interpretación del código. Este mecanismo permite embeber a PHP en todo tipo de documentos, ya que todo lo que esté fuera de las etiquetas de apertura y cierre de PHP será ignorado por el analizador.

PHP también permite la etiqueta de apertura abreviada <? (la cual está desaconsejada debido a que sólo está disponible si se habilita con la directiva short_open_tag del fichero de configuración php.ini, o si PHP se configuró con la opción --enable-short-tags ).

Si un fichero contiene solamente código de PHP, es preferible omitir la etiqueta de cierre de PHP la final del mismo. Así se previene la adición de espacios en blanco o nuevas líneas accidentales después de la etiqueta de cierre, lo cual causaría efectos no deseados debido a que PHP comenzará la salida del búfer cuando no había intención por parte del programador de enviar ninguna salida en ese punto del script.

echo "Hola mundo";

// ... más código

echo "Última sentencia";

// el script finaliza aquí sin etiqueta de cierre de PHP

Historial de cambios
Versión Descripción
7.0.0 Se eliminaron de PHP las etiquetas de ASP <%, %>, <%=, y la etiqueta de script <script language="php">.
5.4.0 La etiqueta <?= siempre está disponible independientemente del ajuste ini short_open_tag.

add a note add a note

User Contributed Notes 6 notes

Mark Clements (
2 months ago
Closing PHP tags are recognised within single-line comments:

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

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

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

/* Code will not end here ?> as closing tags are ignored inside C-style comments. */
crazytonyi at gmail dot com
2 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 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 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.
dave at juuce dot com
5 months ago
// ///////
// comments

Found that single line comments cause issues and received "notice: use of undefined constant php - assumed 'php'" for line 1 of file.

// //////
// comments

Add a space character after <?php on the first line corrects the problem.
purkrt at gmail dot com
3 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.
raoni at gmail dot com
1 month ago
If short_open_tag = Off

<?php/*php not followed by space*/ echo "a"?>
This will not be parsed by php

If short_open_tag = On

<?php/*php not followed by space*/ echo "a"?>
This will be parsed by php, but it throw "Parse error: Syntax error ..." because because 'php' will be assumed as a constant

<?/*? not followed by space*/ echo "a"?>
This will be parsed by php,  and work fine.

(Tested in php 7.1)
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