endforeach в петлях? - PullRequest
       16

endforeach в петлях?

48 голосов
/ 05 января 2011

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

Ответы [ 7 ]

92 голосов
/ 05 января 2011

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

25 голосов
/ 05 января 2011

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

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

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

<?php foreach ($foo as $bar) : ?>
    <div ...>
        ...
    </div>
<?php endforeach; ?>
6 голосов
/ 05 января 2011

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

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

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

<?php foreach($arr as $item):?>
    <!--do stuff -->
<?php endforeach; ?>
3 голосов
/ 25 июня 2012

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

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

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

3 голосов
/ 05 января 2011

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

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

Вы могли бы написать это:

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

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

1 голос
/ 17 апреля 2015

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

0 голосов
/ 05 июня 2014

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

<?php
    while($items = array_pop($lists)){
        echo "<ul>";
        foreach($items as $item){
            echo "<li>$item</li>";
        }
        echo "</ul>";
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...