2010-07-19 64 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效果更好。