2010-05-07 19 views
10

He estado trabajando en PHP desde hace algún tiempo pero hoy cuando vi esta Llegó como nuevo para mí:sintaxis de PHP extraño

if(preg_match('/foo.*bar/','foo is a bar')): 
     echo 'success '; 
     echo 'foo comes before bar'; 

endif; 

Para mi sorpresa, sino que también se ejecuta sin errores. ¿Alguien puede iluminarme?

Gracias a todos :)

+5

como las respuestas a continuación han dicho, esta es una sintaxis alternativa. También es terriblemente doloroso leer OMI, por favor evítelo en su propio código. – nickf

+3

este tipo de sintaxis se usa en las plantillas cuando a menudo se abre y se cierra y se utiliza html en el medio. Es horrible e ilegible incluso en esos casos, y debe evitarse por completo. –

+1

@ Lo'oris, no estoy de acuerdo contigo.Usarlo en tus plantillas puede mejorar la legibilidad si me preguntas: mira http://stackoverflow.com/questions/2788891/strange-php-syntax/2789008#2789008 para ver un ejemplo. –

Respuesta

14

Ese estilo de sintaxis se usa más comúnmente cuando se incrusta en HTML, especialmente para la lógica de plantilla/visualización. Cuando está incrustado de esta manera, es un poco más fácil de leer que la sintaxis de llaves.

<div> 
<? if ($condition): ?> 
    <ul> 
    <? foreach($foo as $bar): ?> 
     <li><?= $bar ?></li> 
    <? endforeach ?> 
    </ul> 
<? endif ?> 
</div> 

Versus:

<div> 
<? if ($condition) { ?> 
    <ul> 
    <? foreach($foo as $bar) { ?> 
     <li><?= $bar ?></li> 
    <? } ?> 
    </ul> 
<? } ?> 

Las etiquetas finales detallados que sea un poco más fácil hacer un seguimiento de los bloques de código anidados, aunque sigue siendo mayormente preferencia personal.

28

Esta es PHP de Alternative syntax for control structures.

que el fragmento es equivalente a:

if(preg_match('/foo.*bar/','foo is a bar')) { 
     echo 'success '; 
     echo 'foo comes before bar'; 
} 

En general:

if(cond): 
... 
... 
endif; 

es el mismo que

if(cond) { 
... 
... 
} 
+1

Te creo ... pero ¿por qué en el buen nombre de Satanás querrías hacer eso? – BIBD

+2

@CodeSlave: supongo que se ve mejor si está incorporando código html. – Daniel

1

Puede leer sobre esto en Alternative syntax for control structures en el manual de PHP. Nuevo formato, el código que envió el siguiente aspecto:

if (preg_match('/foo.*bar/','foo is a bar')): 
    echo 'success '; 
    echo 'foo comes before bar'; 
endif; 

Este código es equivalente a:

if (preg_match('/foo.*bar/','foo is a bar')) { 
    echo 'success '; 
    echo 'foo comes before bar'; 
} 

Esta sintaxis está disponible para varias otras estructuras de control también.

if (condition): 
    // your if code 
elseif (other_condition): 
    // optional elseif code 
else: 
    // optional else code 
endif; 

while (condition): 
    // your while code 
endwhile; 

for (condition): 
    // your for code 
endfor; 

foreach (condition): 
    // your foreach code 
endforeach; 

switch (condition): 
    // your switch code 
endswitch; 
0

Es el equivalente de:

if(preg_match('/foo.*bar/','foo is a bar')): 
echo 'success '; 
echo 'foo comes before bar'; 
endif; 

lo que equivale a:

if(preg_match('/foo.*bar/','foo is a bar')){ 
    echo 'success '; 
    echo 'foo comes before bar'; 
} 

La sabiduría de apoyo sintaxis condicional no estándar obviamente cuestionable.

+0

Esta sintaxis puede ser muy útil en las plantillas, por lo tanto ihmo no es cuestionable. O al menos no obviamente;) –