关闭或不关闭php


14

我已经读过,建议不要关闭php文件(尤其是在php 7中) ?>

我的许多WP php文件都以如下形式结束:

<?php get_sidebar(); ?>
<?php get_footer(); ?>

我是否应该删除结束标签并使用类似的内容

<?php get_sidebar(); ?>
<?php get_footer(); 

在文件末尾?


2
如果在未关闭的php标记之后没有任何内容,那完全没问题,正如我在Laravel这样的许多框架中观察到的那样,它们不会在文件末尾关闭php标记,顺便说一句,WordPress核心文件也遵循相同的方法模式,并没有在末尾关闭php标签,所以我认为我们应该遵循WordPress编码风格,而不要关闭它们。
2015年

1
可能与之相关的火车票:#10633

Answers:


19

是的,请避免在文件末尾关闭PHP标记,这不仅适用于PHP 7,还适用于PHP 5。

原因是,如果关闭标签,标签之后的所有内容(甚至是空行)都将被发送到输出,并使PHP发送标头以及阻止cookie设置,重定向到工作,提要有效,等等。

我想你曾经遇到过这样的消息

无法修改标头信息-行...上已经由(...的输出开始)发送的标头

?>文件结尾处的关闭可能是原因。


1
我相信这是正确的答案。即使是我最初从中获得模板的Underscores,也已在最新更新中删除了结束标记。
IXN 2015年

@IXN如果整个文件是PHP,因此由一个PHP代码块组成(PHP代码块在文件末尾隐式关闭),则这是正确的。但是,如果您有多个PHP代码块,并且混合使用HTML和PHP(如您的问题中的示例所示),则应按照TheDeadMedic在他的回答中所述明确关闭PHP代码块。
怀特先生

我认为唯一的例外是,如果最后一个php代码块后面是html。但是,如果文件上的最后一个符号是?>,则可以/应该将其省略。还是我了解。
IXN 2015年

省略(或包括)关闭的PHP标记的主要原因是为了避免在开发过程中引入愚蠢的错误。如上所述,对于整个PHP文件,这可以避免意外输出导致错误。对于已经混合了HTML输出和PHP的文件,这不会导致错误。但是,在第二种情况下省略关闭PHP标记可能会引入错误,因为您现在必须记住在添加尾随HTML内容之前显式关闭PHP标记-这不是您在完全PHP代码文件中所做的事情。
怀特先生

如果查看WP源代码,您将看到(大部分)PHP包括省略结尾的PHP标记。但是,模板文件(混合HTML和PHP代码块)始终包含结束PHP标记。
怀特先生

11

给定您的特定示例,我将在模板中保留结束标记,即单行函数调用。它是一致的,有助于提高清晰度(以WordPress建议相同的方式在数组后尾加逗号)-否则,假设非开发人员选择了您的文件并开始添加该文件:

<?php get_footer();

<div>What the hell am I doing wrong?</div>

但是,对于所有其他文件(函数,包含文件等),建议绝对是一个好主意:

<?php // Start of file

class MY_Class {
    function just_do_it() {
    }
}

// Bye bye closing tag

我发现它更干净,而且正如其他人提到的那样,没有可怕的“标题已发送”的风险。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.