web-dev-qa-db-fra.com

Endforeach dans les boucles?

J'utilise des crochets lors de l'utilisation de boucles foreach. A quoi sert endforeach?

50
CyberJunkie

C'est principalement pour que vous puissiez clarifier les déclarations de début et de fin lorsque vous créez du HTML dans des boucles:

<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>

J'espère que mon exemple est suffisant pour démontrer qu'une fois que vous avez plusieurs couches de boucles imbriquées, et que l'indentation est levée par toutes les PHP balises open/close et le code HTML contenu (et vous devez peut-être indentez le code HTML d’une certaine façon pour obtenir votre page comme vous le souhaitez), le formulaire syntaxe alternative (endforeach) peut faciliter l’analyse de votre cerveau. la fermeture } peuvent être laissés à eux-mêmes et rendent difficile de dire ce qu'ils sont en train de fermer.

94
Brad Mace

C'est la déclaration de fin pour le syntaxe alternative :

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

Utile pour rendre le code plus lisible si vous sortez de PHP:

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

comme syntaxe alternative, vous pouvez écrire des boucles foreach comme si

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

Ce type de syntaxe est généralement utilisé lorsque php est utilisé comme langage de modélisation en tant que tel.

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

Que dis-tu de ça?

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

Nous pouvons toujours utiliser les accolades les plus utilisées et, en même temps, améliorer la lisibilité.

3
Preecha

C'est juste une syntaxe différente. Au lieu de

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

Vous pouvez écrire ceci:

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

Ils fonctionneront exactement de la même façon. c'est juste une question de style. (Personnellement, je n'ai jamais vu personne utiliser le second formulaire.)

3
cdhowie

En utilisant foreach: ... endforeach; ne rend pas seulement les choses lisibles, il fait aussi moins de charge pour la mémoire comme introduit dans PHP docs Donc, pour les grosses applications, recevoir beaucoup d’utilisateurs, ce serait la meilleure solution

2
Omar El Don