我一直在读,在文件末尾使用PHP关闭标记?>是不好的做法。在下面的上下文中,头文件的问题似乎无关紧要(这是目前为止唯一一个好的参数):

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

每一本好的实践书籍和维基都以这个“规则”开始,但没有人提供好的理由。 还有其他好的理由跳过PHP结束标记吗?


当前回答

如果我正确理解这个问题,它与输出缓冲以及这可能对结束/结束标记的影响有关。我不确定这是一个完全合理的问题。问题是输出缓冲区并不意味着所有内容在发送到客户机之前都保存在内存中。意思是有些内容是。

程序员可以故意刷新缓冲区或输出缓冲区那么PHP中的输出缓冲区选项真的会改变结束标记对编码的影响吗?我认为不是这样的。

也许这就是为什么大多数答案都回到了个人风格和语法。

其他回答

这不是标签……

但如果你有了它,你就有可能在它后面留下空白。

如果你把它作为一个包含在文档的顶部,你可能会在你试图发送HTTP头之前插入空白(即内容),这是不允许的。

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

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

在情形1中。关闭标签是完全没用的,我也想看到只有1(一个)php打开标签和NO(零)关闭标签在这种情况下。这是一个很好的实践,因为它使代码清晰,并将逻辑与表示分开。 对于表示情况(2.),有些人发现关闭所有标签(甚至是PHP处理的标签)是很自然的,这导致了混乱,因为PHP实际上有2个独立的用例,不应该混合在一起:逻辑/微积分和表示

嗯,我知道原因,但我不能说出来:

对于只包含PHP代码的文件,永远不会出现结束标记(?>) 允许的。PHP并不要求它, 省略它可以防止 意外注入尾白 空格变成响应。

来源:http://framework.zend.com/manual/en/coding-standard.php-file-formatting.html

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

具有完整的处理指令语法(<?php……?>) PHP源代码是有效的SGML文档,可以用SGML解析器毫无问题地解析和处理。在附加的限制下,它也可以是有效的XML/XHTML。

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

注意:还要注意,如果要在XML或XHTML中嵌入PHP,则需要使用< ? PHP ?>标记以保持与标准兼容。

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

At some point you may want to concatenate sources. This will be not as easy as simply doing cat source1.php source2.php if you have inconsistency introduced by omitting closing ?> tags. Without ?> it's harder to tell if document was left in PHP escape mode or PHP ignore mode (PI tag <?php may have been opened or not). Life is easier if you consistently leave your documents in PHP ignore mode. It's just like work with well formatted HTML documents compared to documents with unclosed, badly nested tags etc. It seems that some editors like Dreamweaver may have problems with PI left open [1].

Pros

像其他语言一样,关闭任何打开的标记是合乎逻辑的。不仅是X(HT)ML标签,还有花括号,括号… 对初学者来说更容易理解。

Cons

避免在结束标记后无意中添加空白,因为它破坏了header()函数的行为…一些编辑器或FTP客户端/服务器也会自动更改文件的结尾(至少,这是它们的默认配置) PHP手册说关闭标记是可选的,Zend甚至禁止它。

结论

我想说,支持省略标记的论点看起来更强(有助于避免header() +它是PHP/Zend的“推荐”)。我承认,就语法一致性而言,这不是我见过的最“漂亮”的解决方案,但还有什么更好的呢?