2010-07-19 50 views
0

假设我想在PHP中创建一个选择框。本/最佳实践的首选格式?

$months = array ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

选项1:

<select name="month"> 
    <option value="">Month</option> 
    <option value="">-------</option> 
    <?php foreach ($months as $monthNum => $month) { ?> 
    <option value="<?php echo $monthNum+1 ?>"><?php echo $month ?></option> 
    <?php } ?> 
</select> 

选项2:

<select name="month"> 
    <option value="">Month</option> 
    <option value="">-------</option> 
    <?php 
     foreach (months() as $monthNum => $month) 
      echo '<option value="' . ($monthNum+1) . '">' . $month . "</option>\n"; 
?> 
</select> 

我个人认为选择1渲染代码难以阅读和理解,同时选择2个螺丝缩进并将更多的HTML放入PHP中。

哪个选项是首选?

编辑:我不想在PHP之上添加另一个模板引擎,它本身就是一个模板引擎。

回答

2

我认为第二个选项是更好,因为事情像<option value="<?php echo $monthNum+1 ?>">根本就难以阅读和理解,并恕我直言,甚至有点不合逻辑(在标签的标签。)

但说实话,用什么您想了解更多。只有一个建议:也许不使用<?php foreach() { ?> ... <?php } ?>这有时很难理解,你可以使用这个语法:<?php foreach(): ?> ... <?php endforeach; ?>。特别是如果你开始在foreach中使用foreach,那么这个语法可能会更容易理解。

+0

由于使用模板标签样式的建议,我给了+1,但由于标签内的标签不合逻辑,所以我几乎没有使用upvoting。PHP代码包含在XML处理指令中,而不是标签:http://www.w3.org/TR/REC-xml/#sec-pi – 2010-07-19 22:29:37

+0

如果我使用HTML而不是XHTML,该怎么办?比它几乎不可能是XML处理指令,可以吗? ;)我只是用了大多数人最理解的词。 – NikiC 2010-07-20 14:12:11

1

我会去a)为你和你的同事维护更容易,b)一致性。

如果你(和你的同事)认为1更难阅读和理解,那就不要使用它。在6/12/18个月的时间里,当你回到代码时,它会比现在更难理解。

2

选项2无疑是语义这里是PHP PHP是哪里是HTML是HTML

1

就个人而言,我使用选项1,因为我认为这是一个最高优先级,以保持HTML和PHP代码分离成为可能。

如果有帮助,我经常使用速记<?= 'value'; ?>而不是<?php echo 'value'; ?>

+0

我个人认为这是一个坏主意,因为这个速记需要打开short_open_tags,但并非总是如此。 – quantumSoup 2010-07-19 22:13:53

+0

是的,我一定意识到这一点,但幸运的是我在一个不会成为问题的环境中工作。不过,我同意这不适用于所有人,特别是当有很多供应商类型的工作,并且您无法控制服务器配置(或htaccess)时。 – 2010-07-19 22:18:10

1

我认为选项1是完全正确的阅读。但是,如果你不喜欢最后的孤独,你可以使用php's alternativ syntax(使用endforeach)。

+0

我喜欢模板标签语法。奇怪的是,没有其他形式的“try ... catch”。似乎有'尝试,捕捉,endcatch'是合乎逻辑的。 – 2010-07-19 22:34:11

0

在我看来,选项2看起来像一个脚本,吐出一些字符串,其中选项1读取像嵌入PHP代码的HTML模板。对于MVC框架中的视图模板,我发现选项1是最好看,最容易阅读的。对于CLI或其他用途,选项2效果更好。