为什么每行都有<?php和?>

时间:2013-01-09 作者:Indigenuity

我几乎在任何地方都看到过这种习俗,有时,它几乎让我发疯:

<?php //The loop ?>
<?php while ( have_posts() ) : the_post(); ?>
    <?php the_content(); ?>
<?php endwhile; // end of the loop. ?>
其中<?php 和关闭?> 在每一行上,即使没有中间的HTML代码。

My question is: Why? 为什么要包含所有这些额外的标签?

对我来说,这种惯例似乎给代码增加了大量的混乱,一开始就很烦人,而且还添加了更多的地方不小心漏掉了开头或结尾标记。

NOTE

这是从十二主题提取的代码,WordPress给出的示例。

5 个回复
最合适的回答,由SO网友:fuxia 整理而成

这在任何WordPress样式指南中都不推荐,我认为这是一种糟糕的编码样式。初学者使用这种风格,可能是因为它感觉更像HTML…

不幸的是,默认主题经常使用这种风格,因此一些初学者可能会认为这是代码风格的一部分。

这种风格的一个缺点是注释处理。仔细看看下面的示例,看看它是如何不符合作者的预期的:

<?php echo \'Important: \'; // announcement ?>
<?php echo \' enter the word \'; /* start ?>
<?php echo \'<b>password</b>\'; /* the end */ ?>
祝您调试顺利。:)

规则:只有在必须以两种语言的任意一种创建输出时,才能在PHP和HTML上下文之间切换。在所有其他情况下使用常规换行符。

Update, further thoughts: 每个有效的HTML文件都是一个完整有效的PHP程序。是的,即使它不包含一行实际的PHP代码。

如果您从HTML开始,一步一步地添加小部分PHP……您可能最终会得到我们在这里讨论的样式。那就是refactoring 进入游戏:一旦一切按预期运行,就重写代码,直到代码尽可能可读,易于维护和扩展,无需重复部分。

我想有些人没有这最后一步会很开心,这就是为什么这不会很快消失的原因。

SO网友:Andy Adams

虽然我在PHP评论中避免了这一点,但我热衷于模板文件中的PHP开/关。另一种方法是通过PHP字符串回显HTML,这在我看来更糟糕。作为一个基本示例:

<!-- Example 1 -->
<ul>
    <?php
        foreach ( $list_items as $list_item ) {
            echo "<li><a href=\'" . $list_item->url . "\'>" . $list_item->name . "</a></li>";
        }
    ?>
</ul>

<!-- Example 2 -->
<ul>
    <?php foreach ( $list_items as $list_item ) : ?>
        <li>
            <a href="<?php echo $list_item->url; ?>">
                <?php echo $list_item->name; ?>
            </a>
        </li>
    <?php endforeach; ?>
</ul>
示例2是否更详细?可能但在我看来,更容易阅读和编辑。您可以想象,对于复杂的HTML,它会变得多么丑陋。

另外,作为旁注:使用endforeachendif 在PHP逻辑之间编写HTML时,与}.

SO网友:Rarst

这是关于将页面视为以下内容之间的选择:

作为完全由PHP生成的实体,作为HTML文档模板,由PHP模板标签支持,不同的人倾向于以不同的方式看待它。请注意,函数很少使用这种样式,因为它们更像是纯PHP的块。另一方面,这在模板中并不少见,因为它们更多地分布在文件中,纯HTML的数量很容易超过其中的PHP。

如果您查看模板引擎(Mustache、Twig等),它们看起来非常像这种样式,只是它们的语法倾向于消除普通PHP的冗长。

PS我想指出的是,我谈论的是在HTML中嵌入PHP,而不是仅仅为了在每一行上打开和结束标记。

SO网友:kaiser

我的问题是:为什么?为什么要包含所有这些额外的标签?

答案很简单:观众。当人们(不是程序员)抓住一个主题,然后升级安装,运行5分钟的设置等等,对他们来说已经像是在编程了。当他们想在主题中添加或更改一行内容时,他们可能已经知道HTML是什么了。PHP仍然离他们很远。因此,我的猜测是,这背后的想法是允许更轻松地添加或删除元素,而不会在出错时破坏所有内容。

注意:这不是我喜欢、喜欢或建议的。我想这就是为什么会发生的原因。

SO网友:Kitt Parker

我发现一些新的程序员是这样训练的。我正在学习一门关于Lynda的40小时课程,老师在每一行上都添加了PHP标记,函数定义除外。这可能是为了在HTML和PHP之间划清界限,这可能有助于新手理解HTML的结束和PHP的开始。在那之后,这可能是一种习惯。我自己也开始对此感到恼火,决定看看有没有其他人在抱怨。

结束

相关推荐

使用自定义php的WordPress身份验证?

我需要将wordpress登录集成到我的php网站中,为了单次登录访问我的网站和wordpress博客,我使用了一些使用curl的代码,它登录到用户中,然后重定向到我的主页,在我访问wordpress博客后,它不会验证我的身份,它说我要登录,am使用以下代码$username=\"admin\"; $password=\"blog\"; $url=\"http://wordpressblogURL/\"; $cookie=\"cookie.txt\"; $post