PHP 标记

当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php?>,这告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被 PHP 解析器忽略。

PHP 也允许使用短标记 <??>,但不鼓励使用。只有通过激活 php.ini 中的 short_open_tag 配置指令或者在编译 PHP 时使用了配置选项 --enable-short-tags 时才能使用短标记。

如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图。

<?php
echo "Hello world";

// ... more code

echo "Last statement";

// 脚本至此结束,并无 PHP 结束标记

add a note add a note

User Contributed Notes 6 notes

up
7
Mark Clements (kennel17.co.uk)
1 month 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
55
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
/*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
-1
dave at juuce dot com
4 months ago
<?php
// ///////
// comments

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

<?
php<space>
// //////
// comments

Add a space character after <?php on the first line corrects the problem.
up
-87
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.
up
-1
raoni at gmail dot com
22 days 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)
up
-515
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