Zend Framework编码标准提到了以下内容:
对于仅包含PHP代码的文件,绝不允许使用结束标记(“?>”)。 PHP不需要它,省略它可以防止意外地将尾随空格注入响应中。
但是我确实记得听到一个问题(使用工具或可能包含?)文件需要关闭标记。
有没有人知道你需要关闭标签的任何问题(除了想要对称的开发者问题)或者它们通常是个坏主意?
答案 0 :(得分:25)
尽可能删除结束标记可能是最佳做法。原因是因为如果你在?>之外有任何字符(甚至是空格)。在一个php文件中,如果在标题设置之前将字符发送到浏览器,它可以停止诸如标题之类的东西停止工作。
答案 1 :(得分:11)
如果您使用关闭PHP标记,那么您可以轻松找到意外截断的文件(例如,尚未完全上传)。
但是,这个问题应该通过使文件系统和传输可靠而不是添加PHP“canary”标签来解决:)
另一个可能的原因是PEAR编码标准需要它。他们需要它,因为他们需要它而且你不能质疑PEAR编码标准。
答案 2 :(得分:4)
您可以将php开放标记视为仅限php的文件,作为一种shebang行(如#!/ bin / bash),这样就不需要结束标记了。
我们也遵循ZF标准,没有关于php的文件的结束标记。但是我从来没有听说过任何因为缺少结束标记而无法解析文件的工具,而且我还没有遇到任何问题,因为没有使用它。
答案 3 :(得分:3)
我总是为php文件编写结束标记,并且故意不用空格或eol来跟随它。
标准意味着如果省略结束标记,则将隐式提供一个标记。但这并不能免除开发人员编写正确的html / xml。
并且可能存在两个文件在html / php处理之外组合的情况,并且缺少标签会导致极度悲伤。
答案 4 :(得分:2)
我总是把它们放进去,因为我认为它们是一个奇特的结束括号 - 就像我在编写代码之前编写条件和循环时我放入开/闭括号对,我使用PHP文件。
无论是否“正确”,我经常发现自己将“纯粹的”PHP文件转换为“非纯”,而结束标记非常有用。
答案 5 :(得分:1)
我们使用Drupal,它总是省略结束标记,因此没有任何问题。
因为它总是适用于Drupal(我从阅读手册中知道它是可选的),我曾经创建了一个没有结束标记的配置文件(只包含PHP代码)。出于某种原因,直到(在同事的坚持下)我才添加结束标签。我们当时没有试图找出原因。
我总是在我编写的代码中使用结束标记;它看起来更加模拟,概念上“关闭”开始标记,我总是小心不要在结束标记之后留下任何额外的空格。
答案 6 :(得分:1)
我总是使用结束标签,如果没有它们,它看起来并不好看。它也不是没有它们的有效xml处理指令(如果文件中唯一的东西是php,你不关心)
答案 7 :(得分:1)
在连接多个文件时检查编码错误不起作用。我使用以下shell命令来检查错误。
find . -name '*.php' | xargs cat | php -l
当然,以下命令仍然有效(并显示已损坏文件的文件名)
find . -name '*.php' | while read filename; do php -l $filename | grep -v 'No syntax errors '; done
但这个慢得多。
答案 8 :(得分:0)
我们的办公室使用Flash内置的电子学习应用程序,我们很早就发现,如果从服务器端脚本中省略了结束标记,那么它会破坏我们与e-learnng应用程序的通信机制。
有一点需要注意的是,我们的debuggng进程没有首先在简化的环境中尝试它,以确保它不是缺少的结束标记和来自其他脚本的一些错误输出的组合......
答案 9 :(得分:0)
在回复@ gabriel1836时,服务器端的结束标记与Flash应用程序无关;相关的是服务器响应Flash应用程序的远程请求而返回的有效负载。在仅PHP文件上省略结束标记只会在确保在将标头发送到您的Flash应用程序之前未返回虚假输出时影响这一点。
在回复@CesarB时,除非你能给出具体,可重复的例子,否则你所做的就是传播FUD。 PHP手册非常清楚,结束标记是可选的。