2011-06-02 10 views
6

Ocurre que, cuando escribo código PHP, coloco accidentalmente un punto y coma ; justo después de una instrucción if. Por ejemplo:¿Qué hace si(); hacer, donde el punto y coma es justo después de los paréntesis?

if($a > 1); 
{ 
    .... 
} 

Pensé que PHP debería generar un error en este caso, pero no lo es. Ese tipo de sintaxis debería tener un significado, solo me pregunto qué es.

Por lo que pude ver, la condición parece ser siempre cierta cuando se agrega el ;, pero no estoy seguro de que este sea el significado.

+0

Funciona no porque tenga un propósito divino, sino que tiene sentido desde el punto de vista gramatical (o al menos no causa dificultades de análisis). A veces los bucles 'for' no necesitan cuerpos, aunque preferiría escribirlos como' for ($ a; $ b; $ c) {} 'con llaves. – Matthew

Respuesta

14

Una sola ; puede leerse como una "declaración vacía" y

if($a > 1); 
{ 
    .... 
} 

es equivalente a

if($a > 1) 
    ;  // execute an empty statement if $a > 1 

// then execute the following block of code. 
{ 
    .... 
} 


Por lo que pude ver la condición parece ser siempre cierto cuando el ; se añade

Sólo parece como si ya se ejecuta el bloque independientemente de la sentencia if.

+1

Creo que también se pregunta por qué 'if ($ a> 1);' en sí mismo * debería ser incluso * sintaxis válida, y si es así, para qué sirve. Edit: O tal vez eso no es lo que está preguntando, pero creo que es una pregunta más interesante, de todos modos. :) –

+0

es por eso que el código entre los corchetes siempre se ejecuta, gracias por una respuesta tan rápida – Dalen

+0

@Dalen, lo tienes. – aioobe

1

Al agregar el punto y coma, esencialmente termina el bloque if antes de las llaves. No es verdad, es solo que no haces nada en el si.

Piense en ello como esto, si usted no tiene los apoyos:

if($a>1) 
    echo "Yes"; 
echo "No"; 

hace todo antes del primer punto y coma dentro del caso. Entonces en tu caso, no hay nada antes del primer punto y coma, así que no pasa nada.

Cuestiones relacionadas