初学PHP的时候知道其是嵌入式的脚本语言,以<?php
开头?>
表示结束,并且不建议使用<?
和?>
短标记,没有深究为什么有的时候省略结束标记也是可以的。
PHP解析<?php ?>
标记之间的代码,标记之外的代码都将被忽略,如果标记之外误打了一个空格或者换行会有什么问题呢?看下面的示例
a.php文件,最后的[space]表明输入的是一个空格
|
|
b.php文件
|
|
输出的结果是
|
|
结束标记后加入换行符也是如此的,可以发现这会导致PHP开始输出这些空白。或许会问到,如果不去var_dump()
不就是没有空格输出了么?但是当PHP程序是一个下载文件的脚本,这样读取到的文件前面就会被改变了,文件下载也就是失败的了。
其实,自己在之前的应用中遇到过这样的问题,当时是想var_dump()
一下抓取出来的网页,可是在抓取的网页源码之前始终都有一些空格,现在终于明白问题在哪了。
那么什么时候不需要加结束标记呢?如果是一个需要被包含的文件,没有?>结束标记的话会减少很多问题,比如ob_start
header
setcookie
session_start
这些方法之前是不允许有输出的。PHP结束符用于在PHP与HTML混写时指示代码的结束,对于纯PHP文件,文件结束了代码也就结束了,应该忽略PHP结束标记,并插入一段注释说明这是文件的底部并定位这个文件的相对路径,这样有利于确定这个文件是已经结束的而不是被删节的。
另外,PHP结束符在注释中也需要注意一下,在//
或#
注释后加入?>
是会影响接下来语句的解析的,当然这在有的编辑器中已经提示出来了,如果注释中需要包含?>
则需要使用/**/
来注释。
参考资料