2011-01-05 27 views

Respuesta

78

es sobre todo por lo que puede hacer declaraciones inicial y final más clara al crear HTML en bucles:

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

frente

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

Espero que mi ejemplo es suficiente para demostrar que una vez que tenga varias capas de bucles anidados, y la sangría es expulsado por todo el PHP abiertas etiquetas/cierre y el HTML contenido (y tal vez tiene que aplicar sangría al HTML de cierta manera para obtener su página de la manera que desee), el formulario alternate syntax (endforeach) puede hacer que su cerebro sea más fácil de analizar. Con el estilo normal, el cierre } se puede dejar solo y hace que sea difícil decir lo que realmente están cerrando.

+8

Si tiene una coincidencia de paréntesis, entonces me resulta más fácil ver {} incluso en medio de gran cantidad de HTML. Aunque tal vez es más fácil para los diseñadores, pero la mayoría de las herramientas admiten la coincidencia de grupos resaltados. – phazei

+1

De acuerdo, @phazei, si no está usando un editor que coincida con los corchetes, está usando el editor equivocado. – Jason

+2

Buena respuesta. Promuevo el uso de la forma alternativa en las plantillas. Es mucho más limpio y tiene menos conflictos con el lenguaje en el que se ha inyectado. Confiar en su IDE para hacer que su código desordenado sea más legible no es realmente aceptable. Sin embargo, al final siempre veo este debate como una extensión del debate de refuerzo, y esta forma alternativa es más o menos equivalente al estilo Allman http://en.wikipedia.org/wiki/Indent_style#Allman_style con los bloques equilibrados a la vista del código que presenta. Si no obtiene o no comprende los beneficios de Allman, probablemente tampoco obtendrá los beneficios de esto. – Gavin

19

Es la declaración final de la alternative syntax:

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

útil para hacer más legible el código si estás salir de PHP:

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

Es sólo una sintaxis diferente. En lugar de

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

Se puede escribir esto:

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

funcionarán exactamente de la misma; es solo una cuestión de estilo. (Personalmente nunca he visto a nadie usar la segunda forma.)

+5

La segunda forma se usa mucho más cuando se usa PHP en plantillas donde hay un 95% de HTML y solo un rociado de estructuras de control de PHP y 'echo's. –

+6

Personalmente, nunca he visto a nadie usar '#' como operador de comentarios en PHP ... ;-) – deceze

+0

@Matthew, bueno, ¿cuál es la ventaja de la segunda forma? No lo entiendo Para mí, parece más simple usar '{..}' – CyberJunkie

6

como una sintaxis alternativa se puede escribir foreach al igual que

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

Este tipo de sintaxis se utiliza normalmente cuando PHP está siendo utilizado como una plantilla lenguaje como tal

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

¿Qué tal esto?

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

Todavía podemos utilizar las llaves más ampliamente utilizadas y, al mismo tiempo, aumentar la legibilidad.

-3

¿Qué tal eso?

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

Normalmente su IDE no reconocerá que las cadenas contienen HTML y no advertirá sobre no- etiquetas coincidentes. –

2

Usando foreach: ... endforeach; no sólo hace las cosas legibles, sino que también hace menos carga para la memoria como se introdujo en PHP docs Así que para grandes aplicaciones, recibiendo muchos usuarios esto sería la mejor solución