循环中的endforeach?

Cyb*_*kie 52 php foreach loops if-statement

我在使用foreach循环时使用括号.什么是endforeach?

Bra*_*ace 97

主要是因为在循环中创建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>
Run Code Online (Sandbox Code Playgroud)

<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>
Run Code Online (Sandbox Code Playgroud)

希望我的示例足以证明,一旦你有几层嵌套循环,并且所有PHP打开/关闭标记和包含的HTML都会抛弃缩进(也许你必须以某种方式缩进HTML以获得你的页面你想要的方式),替代语法(endforeach)形式可以让你的大脑更容易解析.使用正常的样式,结束}可以自行保留,并且很难说出它们实际关闭的内容.

  • 如果你有支架匹配,那么我发现即使在很多HTML中也更容易看到{}.虽然对设计师来说可能更容易,但大多数工具都支持突出显示的支架匹配. (9认同)
  • 好答案.我提倡在模板中使用替代表单.它更清晰,与注入的语言冲突更少.依靠你的IDE来使你的混乱代码更具可读性并不是真的可以接受.最终虽然我总是把这场辩论视为支持辩论的延伸,但这种替代形式大致相当于Allman风格的http://en.wikipedia.org/wiki/Indent_style#Allman_style,具有平衡的眼睛代码块,它呈现.如果您没有了解或理解奥尔曼的好处,您可能也不会从中受益. (2认同)

dec*_*eze 26

它是替代语法的结束语句:

foreach ($foo as $bar) :
    ...
endforeach;
Run Code Online (Sandbox Code Playgroud)

如果你突破PHP,有助于使代码更具可读性:

<?php foreach ($foo as $bar) : ?>
    <div ...>
        ...
    </div>
<?php endforeach; ?>
Run Code Online (Sandbox Code Playgroud)

  • @Fahad *如果您不使用PHP,可用于使代码更具可读性* (2认同)

acq*_*sce 6

作为替代语法,您可以像这样编写foreach循环

foreach($arr as $item):
    //do stuff
endforeach;
Run Code Online (Sandbox Code Playgroud)

当php被用作模板语言时,通常使用这种类型的语法

<?php foreach($arr as $item):?>
    <!--do stuff -->
<?php endforeach; ?>
Run Code Online (Sandbox Code Playgroud)