为什么有人会省略关闭标签?

拜拜、爱过 提交于 2020-02-26 04:39:37

我一直在阅读,在文件末尾使用PHP close标签?>是一种不好的做法。 标头问题在以下情况下似乎无关紧要(这是迄今为止唯一的好参数):

现代版本的PHP在php.ini中设置了output_buffering标志。如果启用了输出缓冲,则可以在输出HTML之后设置HTTP标头和cookie,因为返回的代码不会立即发送到浏览器。

每本优秀实践书籍和Wiki均以该“规则”开头,但没有人提供充分的理由。 是否还有另一个很好的理由跳过结尾的PHP标记?


#1楼

除了已经说过的所有内容外,我还要提出另一个原因,这对我们进行调试是一个巨大的痛苦。

当封闭的php标记后面有空白时,带有PHP 5.4的Apache 2.4.6实际上在我们的生产机器上存在分段错误。 我只是浪费了几个小时,直到我终于用strace缩小了bug的范围。

这是Apache引发的错误:

[core:notice] [pid 7842] AH00052: child pid 10218 exit signal Segmentation fault (11)

#2楼

由于我的问题被标记为与此重复的问题,我认为可以出于某些原因发布为什么省略结束标记?>可以的。

  • 使用完整的处理指令语法( <?php ... ?> ),PHP源代码是有效的SGML文档,可以对它进行解析和处理,而SGML解析器不会出现问题。 除其他限制外,它也可以是有效的XML / XHTML。

没有什么可以阻止您编写有效的XML / HTML / SGML代码。 PHP文档意识到了这一点。 摘抄:

注意:另外请注意,如果要将PHP嵌入XML或XHTML中,则需要使用<?php?>标记以保持符合标准。

当然,PHP语法不是严格的SGML / XML / HTML,并且您创建的文档不是SGML / XML / HTML,就像您可以将HTML转换为XHTML来兼容XML一样。

  • 在某些时候,您可能希望连接源。 如果由于省略了结束?>标记而引起的不一致,这将不像简单地执行cat source1.php source2.php那样简单。

  • 如果没有?>则很难判断文档是处于PHP转义模式还是PHP忽略模式(PI标签<?php可能已打开或未打开)。 如果您始终将文档置于PHP忽略模式,则生活会更轻松。 就像使用格式正确的HTML文档相比,使用未关闭,嵌套错误的标签等文档进行处理一样。

  • 似乎有些编辑器,例如Dreamweaver,可能在PI处于打开状态时会遇到问题[1]


#3楼

php代码有2种可能的用法:

  1. PHP代码,例如类定义或函数定义
  2. 使用PHP作为模板语言(即在视图中)

在第一种情况下,结束标记是完全不可用的,在这种情况下,我也想只看到1(一个)php打开标记,而没有(零)结束标记。 这是一个好习惯,因为它可以使代码整洁,并使逻辑与表示分离。 对于演示案例(2.),有人发现关闭所有标签(甚至是PHP处理过的标签)是很自然的,这导致混淆,因为PHP实际上有2个单独的用例,不应混用:逻辑/演算和介绍


#4楼

根据docs ,由于以下原因,最好省略结束标记,如果它位于文件末尾:

如果文件是纯PHP代码,则最好在文件末尾省略PHP结束标记。 这样可以防止在PHP结束标记之后添加意外的空格或换行,这可能会导致不良影响,因为当程序员不打算在脚本中的该点发送任何输出时,PHP将开始输出缓冲。

PHP手册>语言参考>基本语法> PHP标记


#5楼

这不是标签...

但是,如果您有它,则可能会冒空白。

如果然后将其用作文档顶部的包含,则可能最终会在尝试发送HTTP标头之前插入空格(即内容),这是不允许的。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!