2008-12-19 15 views
22

Estaba viendo un foro y alguien me preguntó por un archivo PHP que habían encontrado en la web. Tiene varios puntos de este tipo en el código:condicional de PHP, se necesitan corchetes?

if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR);

Siempre he pensado que se necesitan soportes para encerrar lo que quiere hacer si la condición es verdadera. ¿Hay alguna otra alternativa, como si está en la misma línea que no?

También hay otra línea como la siguiente: if ($action != ""): mail("$adminaddress","Visitor Comment from YOUR SITE",

Mi instinto es decir que esto no iba a funcionar, pero también no sé si se trata de un archivo PHP anticuado y que solía trabajar?

Respuesta

55

que puede hacer si else como este:

<?php 
if ($something) { 
    echo 'one conditional line of code'; 
    echo 'another conditional line of code'; 
} 


if ($something) echo 'one conditional line of code'; 

if ($something) 
echo 'one conditional line of code'; 
echo 'a NON-conditional line of code'; // this line gets executed regardless of the value of $something 
?> 



y luego también se puede escribir si - else en una sintaxis alternativa:

<?php 
if ($something): 
    echo 'one conditional line of code'; 
    echo 'another conditional line of code'; 
elseif ($somethingElse): 
    echo 'one conditional line of code'; 
    echo 'another conditional line of code'; 
else: 
    echo 'one conditional line of code'; 
    echo 'another conditional line of code'; 
endif; 
?> 



con el suplente sintaxis también puede caer fuera del modo de análisis de esta manera:

<?php 
if ($something): 
?> 
one conditional line of code<br /> 
another conditional line of code 
<?php 
else: 
    echo "it's value was: $value<br />\n"; 
?> 
another conditional line of code 
<?php 
endif; 
?> 

Pero esto se pone muy sucio muy rápido y no recomendaré su uso (excepto tal vez para la plantilla-lógica).



y para que sea completa:

<?php 
$result = $something ? 'something was true' : 'something was false'; 
echo $result; 
?> 

equals 

<?php 
if ($something) { 
    $result = 'something was true'; 
} else { 
    $result = 'something was false'; 
} 
echo $result; 
?> 
+2

Wow, no sabía que había tantas opciones para estructurar el código php. ¡Gracias! – Levi

+2

Si el último ejemplo, no necesita la variable adicional: echo $ something? 'algo era cierto': 'algo era falso'; –

+0

Sé que funciona, pero creo que leí en alguna parte que era un resultado no documentado (y por lo tanto podría cambiar en la versión futura). Aunque no estoy seguro – Jacco

1

llaves (no entre paréntesis) son opcionales en PHP, como en la mayoría de sintaxis similar a C. Quizás estás pensando en Perl; se requieren allí, para esa forma de sintaxis.

Lo de dos puntos es una forma de estructura de control alternativa compatible con PHP. Lo odio, pero a algunas personas (en particular a los diseñadores de sistemas de plantillas, al parecer) les encanta.

+0

Gracias, debe haber sido que aprendí Perl primero y debe haber sido el lado más estricto de mi parte pensando que estaba mal. – Levi

7

entrar en un poco más de detalle, la razón de que las llaves son opcionales es que la sintaxis es la siguiente:

if(CONDITION) BLOCK 
[elseif(CONDITION) BLOCK] 
[else BLOCK] 

bloque puede ser una sola instrucción:

foo(); 

o puede ser un grupo con ortesis-cerrado de declaraciones:

{ 
    foo(); 
    bar(); 
} 
2

En mi opinión

if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR); 

es válida, pero mucho más difícil de leer que:

if ($REMOTE_ADDR == "") { 
    $ip = "no ip"; 
} else { 
    $ip = getHostByAddr($REMOTE_ADDR); 
} 
+0

Me gusta el proceso 'if (statement); else process2; 'todo en líneas separadas. Se ve como el que tiene paréntesis, excepto sin los corchetes. – JVE999

-2
brackets are needed to enclose what you want to do if the condition is true 

no puede pensar en cualquier idioma que requiere este

0

Sí, con exclusión de los tirantes está permitido, aunque muchas veces he escuchado 2 razones para no usar esa sintaxis:

  1. Es más difícil t o leer. Menos obvio para otro programador.
  2. Si alguna vez quieres agregar algo dentro del if, entonces necesitas agregar los frenos que son más difíciles después de la primera codificación, ya que la mayoría de los editores agregarán el parche de cierre para ti.

Además, sí, la sintaxis de dos puntos es válida. Las alternativas se pueden encontrar aquí: http://php.net/manual/en/control-structures.alternative-syntax.php

+0

--- 1. Es más difícil de leer. Menos obvio para otro programador. Eso es controvertido. A muchos programadores les gusta "absorber" más código con menos desplazamiento vertical (no estoy diciendo que tenga que escribir varias instrucciones ;;; en una sola línea) De esta manera puede ver mejor la "imagen más grande". Pero estoy de acuerdo, siempre es mejor para el modo de depuración. – PatlaDJ

Cuestiones relacionadas