<?php //The loop ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; // end of the loop. ?>
<?php
和收盘?>
分别存在行,即使没有中间的HTML代码。 我的问题是:为什么?为什么要包括所有这些额外的标签?
对我来说,这种约定似乎给代码增加了很多混乱,一开始很烦人,并增加了更多的地方以至于不小心遗漏了开始或结束标签。 br />
注意
这是从二十二主题(WordPress给出的示例)中提取的代码。
#1 楼
在任何WordPress样式指南中均不建议这样做,我认为这是一种不良的编码样式。初学者正在使用这种样式,可能是因为它感觉更像HTML……不幸的是,默认主题经常使用这种样式,因此一些初学者可能会认为它是代码样式的一部分。 />
这种样式的一个缺点是注释处理。仔细看下面的示例,看看它不符合作者的预期:
<?php echo 'Important: '; // announcement ?>
<?php echo ' enter the word '; /* start ?>
<?php echo '<b>password</b>'; /* the end */ ?>
祝您调试好运。 :)
规则:仅当必须创建两种语言的输出时,才在PHP和HTML上下文之间切换。在所有其他情况下,请使用常规换行符。
更新,进一步考虑:每个有效的HTML文件都是完整有效的PHP程序。是的,即使它不包含一行实际的PHP代码。
如果您从HTML开始并逐步添加PHP的小片段…您可能会得到我们在此讨论的样式。这就是重构的关键所在:一切都按预期运行后,重新编写代码,直到尽可能可读,易于维护和扩展,而无需重复任何部分。
我想有些人如果没有最后一步会很高兴,这就是为什么这种情况不会很快消失的原因。
评论
遗憾的是上面突出显示的语法没有显示该注释实际发生的情况...
– Webaware
2013年1月9日23:22
@webaware我认为这更能说明问题。 :)
– fuxia♦
2013年1月9日23:23
说“在任何地方都不建议这样做”太过分了。我建议这样做,尽管我很可能是少数派,但我已经提出了足够多的主题来提出半有效的意见:)。
–安迪·亚当斯(Andy Adams)
13年10月10日在1:06
@AndyAdams公平,我已表述为。现在走开,你这个邪恶的推荐者。 :)
– fuxia♦
2013年1月10日,1:14
主题使用这种样式,因为这样做太难看了。重构主题时,我希望将代码重写为尽可能可读,这意味着不要到处都有echo / printf / var_dump并将每个控件结构放在自己的<?对内。 ...?>使嵌套更容易理解。我要做的与OP示例不同的一件事是,我放了the_post();在自己的路线上。
– Lie Ryan
2013年1月10日下午4:16
#2 楼
虽然我避免使用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会变得多么丑陋。 >
评论
但是,} over endif的巨大优势在于(在许多编辑器中),您可以轻松地看到{的开头,因此是否已正确关闭了所有内容。尝试使用endif和一大堆条件函数来解决这个问题。
–user2015
2013年1月10日,1:10
foreach($ list_items as $ list_item)printf('
– fuxia♦
13年1月10日在1:18
@toscho:你完全错了。您仍然在混合PHP和HTML,更喜欢第二种样式的人这样做是因为我们希望避免在PHP字符串中包含HTML。在将PHP用作模板语言时,我使用第二种样式,因为这是明智地嵌套PHP和HTML的混合物的唯一方法,而在将PHP用作脚本语言时,我使用第二种样式,因为通常没有充分的理由拥有HTML当您将应用程序逻辑与模板分开时,可以在脚本中使用。如果可以使用短标签,则第二种样式会更好: ...?>和<?= ...?>。
– Lie Ryan
13年1月10日,下午3:56
@Piet:如果您在匹配大括号时遇到麻烦,您可能从未听说过缩进吗?同样,您应该能够配置为在任何体面的编辑器中突出显示endif的开头。
– Lie Ryan
13年10月10日在4:21
@LieRyan很好。
–稀有
2013年1月12日14:09
#3 楼
这是关于在以下页面之间进行选择:作为完全由PHP生成的实体
作为HTML文档模板,由PHP模板标签提供支持
不同人们倾向于以不同的方式思考它。请注意,函数很少使用这种样式,因为它们更像纯PHP的块。另一方面,模板在模板中并不少见,因为它们在文件中分布更广,纯HTML的数量比PHP中的数量容易得多。等等)-它们看起来非常像这种样式,除了它们的语法趋向于消除普通PHP的冗长。
PS我想指出的是,我讲的是PHP在HTML中的合理嵌入,而不是字面意义上的开放只是为了它而在每行上加上结束标签。
#4 楼
我的问题是:为什么?为什么要包含所有这些额外的标签?
答案很简单:受众。当人们(不是程序员)抓住一个主题时,然后通过FTP传输安装,运行5分钟的安装程序等等,就好像对他们进行编程一样。然后,当他们想要在主题中添加或更改一行内容时,他们可能已经弄清楚了HTML是什么。 PHP仍然遥不可及。因此,我的猜测是,其背后的想法是允许更轻松地添加或删除元素,而又不会在出错时破坏所有内容。我就是这么想的。
评论
另外,简写while语句= o标记结束-此问题没有明确的答案,并且肯定不是WP特定的问题-使用PHP的任何人都将遇到此问题
@anu:首先,一个问题可能不一定总是有一个确定的答案(尽管它可能仍然是最佳答案)。该准则说“实用,负责”。其次,是的,从技术上讲,这是一个PHP问题,但是我在使用WP的短时间内看到了很多东西。因此,尽管这不仅限于WP,但在我看来,它具有足够的相关性,可以在WP设置中提出要求。