Foreachループを使用するときは括弧を使用します。 endforeachとは何ですか?
これは主に、ループで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>
versus
<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 open/closeタグと含まれている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; ?>
これはどう?
<ul>
<?php while ($items = array_pop($lists)) { ?>
<ul>
<?php foreach ($items as $item) { ?>
<li><?= $item ?></li>
<?php
}//foreach
}//while ?>
さらに広く使用されているブレースを引き続き使用でき、同時に読みやすさを向上させることができます。
それは単なる異なる構文です。の代わりに
foreach ($a as $v) {
# ...
}
これを書くことができます:
foreach ($a as $v):
# ...
endforeach;
それらはまったく同じように機能します。それはただのスタイルの問題です。 (個人的には、だれも2番目のフォームを使用するのを見たことはありません。)
foreach:
... endforeach;
を使用すると、読みやすくなるだけでなく、PHP docsこれが最良の解決策です