endforeach в циклах?

Я использую скобки при использовании петель foreach. Для чего это конец?

Это в основном так, что вы можете сделать начальные и конечные утверждения более ясными при создании 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-код для получения страницы так, как вы хотите), форма альтернативного синтаксиса ( endforeach ) может облегчить анализ вашего мозга. С обычным стилем закрытие } можно оставить самостоятельно и затруднить определение того, что они фактически закрывают.

Это конечный оператор для альтернативного синтаксиса :

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

Полезно сделать код более читаемым, если вы нарушите PHP:

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

в качестве альтернативного синтаксиса вы можете писать так называемые петли foreach

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

Этот тип синтаксиса обычно используется, когда php используется как язык шаблонов как таковой

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

Это просто другой синтаксис. Вместо

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

Вы можете написать следующее:

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

Они будут действовать точно так же; это просто вопрос стиля. (Лично я никогда не видел, чтобы кто-то использовал вторую форму.)

Как насчет этого?

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

Мы все еще можем использовать более широко используемые брекеты и в то же время повышать читаемость.

Использование foreach:endforeach; не только делает чтение понятным, но и делает наименьшую нагрузку на память, как представлено в PHP docs. Итак, для больших приложений, получающих много пользователей, это было бы лучшим решением

Как насчет этого?

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