2011-01-05 29 views

回答

78

它主要是讓你可以在創建HTML循環時開始和結束的語句更清晰:

<table> 
<? while ($record = mysql_fetch_assoc($rs)): ?> 
    <? if (!$record['deleted']): ?> 
     <tr> 
     <? foreach ($display_fields as $field): ?> 
      <td><?= $record[$field] ?></td> 
     <? endforeach; ?> 
     <td> 
     <select name="action" onChange="submit"> 
     <? foreach ($actions as $action): ?> 
      <option value="<?= $action ?>"><?= $action ?> 
     <? endforeach; ?> 
     </td> 
     </tr> 
    <? else: ?> 
     <tr><td colspan="<?= array_count($display_fields) ?>"><i>record <?= $record['id'] ?> has been deleted</i></td></tr> 
    <? endif; ?> 
<? endwhile; ?> 
</table> 

<table> 
<? while ($record = mysql_fetch_assoc($rs)) { ?> 
    <? if (!$record['deleted']) { ?> 
     <tr> 
     <? foreach ($display_fields as $field) { ?> 
      <td><?= $record[$field] ?></td> 
     <? } ?> 
     <td> 
     <select name="action" onChange="submit"> 
     <? foreach ($actions as $action) { ?> 
      <option value="<?= $action ?>"><?= action ?> 
     <? } ?> 
     </td> 
     </tr> 
    <? } else { ?> 
     <tr><td colspan="<?= array_count($display_fields) ?>"><i>record <?= $record['id'] ?> has been deleted</i></td></tr> 
    <? } ?> 
<? } ?> 
</table> 

希望我的例子足以證明,一旦你有嵌套的循環數層,並縮進被所有PHP打開/關閉標籤和所包含的HTML揭去(也許你不得不按照你想要的方式縮進HTML),alternate syntaxendforeach)表單可以讓你的大腦更容易解析。如果採用正常風格,關閉}可以自己留下,並且很難說出它們實際上正在關閉的內容。

+8

如果您有括號匹配,那麼即使在許多HTML中,我也會發現更容易看到{}。儘管設計師可能更容易,但大多數工具都支持突出顯示的支架匹配。 – phazei 2012-04-21 01:44:43

+1

同意@phazei,如果你沒有使用與括號相匹配的編輯器,那麼你使用的是錯誤的編輯器。 – Jason 2013-04-23 20:34:59

+2

很好的答案。我推廣使用模板中的替代形式。它更清潔,並且與注入的語言衝突得更少。依靠你的IDE讓你的亂碼更具可讀性並不是真的可以接受。雖然最終我總是看到這個辯論作爲支撐辯論的延伸,並且這另一種形式是大約相當於奧爾曼風格http://en.wikipedia.org/wiki/Indent_style#Allman_style與平衡到代碼的眼塊那它呈現。如果你沒有得到或理解Allman的好處,你可能不會得到這個好處。 – Gavin 2013-09-19 06:47:04

19

這對alternative syntax末聲明:

foreach ($foo as $bar) : 
    ... 
endforeach; 

有益的,使代碼,如果你打破了PHP的可讀性更強:

<?php foreach ($foo as $bar) : ?> 
    <div ...> 
     ... 
    </div> 
<?php endforeach; ?> 
3

這只是一個不同的語法。取而代之的

foreach ($a as $v) { 
    # ... 
} 

你可以這樣寫:

foreach ($a as $v): 
    # ... 
endforeach; 

他們將發揮作用完全一樣;這只是一個風格問題。 (我個人從未見過任何人使用第二種形式。)

+5

第二種形式在使用95%HTML的模板中使用PHP以及PHP控制結構和「echo」時使用更多。 – 2011-01-05 02:54:02

+6

就我個人而言,我從來沒有見過任何人使用'#'作爲PHP中的註釋運算符...... ;-) – deceze 2011-01-05 02:55:21

+0

@Matthew,那麼第二種形式的優點是什麼?我不明白。對我來說,使用'{..}' – CyberJunkie 2011-01-05 02:56:28

6

作爲替代的語法可以寫foreach循環像這樣

foreach($arr as $item): 
    //do stuff 
endforeach; 

當PHP被用作模板這種類型的語法的通常用於語言作爲這樣

<?php foreach($arr as $item):?> 
    <!--do stuff --> 
<?php endforeach; ?> 
2

這個怎麼樣?

<ul> 
<?php while ($items = array_pop($lists)) { ?> 
    <ul> 
    <?php foreach ($items as $item) { ?> 
     <li><?= $item ?></li> 
    <?php 
    }//foreach 
}//while ?> 

我們仍然可以使用更廣泛使用大括號,並在同一時間,增加可讀性。

-3

那怎麼樣?

<?php 
    while($items = array_pop($lists)){ 
     echo "<ul>"; 
     foreach($items as $item){ 
      echo "<li>$item</li>"; 
     } 
     echo "</ul>"; 
    } 
?> 
+0

通常你的IDE無法識別的字符串包含HTML,它不會警告非匹配標籤。 – 2014-11-11 05:13:05

2

使用foreach: ... endforeach;不僅使事情可讀,這也使得最小負載的內存作爲PHP文檔 因此,對於大型應用推出,收到了許多用戶來說,這將是最好的解決辦法