varias - Condicional de PHP, se necesitan corchetes?
if php varias condiciones (6)
Las llaves (no corchetes) son opcionales en PHP, como en la mayoría de las sintaxis tipo 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.
Estaba navegando en un foro y alguien me preguntó por un archivo PHP que habían encontrado en la web. Tiene varios puntos como este en el código:
if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR);
Siempre he pensado que se necesitan corchetes para adjuntar lo que quieres 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 esta: if ($action != ""): mail("$adminaddress","Visitor Comment from YOUR SITE",
Mi instinto es decir que esto no funcionaría, pero tampoco sé si es un archivo PHP obsoleto y solía funcionar.
Para entrar en un poco más de detalle, la razón por la que las llaves son opcionales es que la sintaxis se ve así:
if(CONDITION) BLOCK
[elseif(CONDITION) BLOCK]
[else BLOCK]
BLOCK puede ser una sola declaración:
foo();
o puede ser un grupo de declaraciones encerrado en corsé:
{
foo();
bar();
}
Sí, excluir las llaves está permitido, aunque muchas veces he escuchado 2 razones para no usar esa sintaxis:
- Es más difícil de leer Menos obvio para otro programador.
- Si alguna vez quieres agregar algo dentro del if, entonces necesitas agregar los frenos, que es más difícil después de la primera codificación, ya que la mayoría de los editores agregarán el parche de cierre por ti.
Además, sí, la sintaxis de los dos puntos es válida. Las alternativas se pueden encontrar aquí: http://php.net/manual/en/control-structures.alternative-syntax.php
en mi opinión
if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR);
es válido, pero es mucho más difícil de leer que:
if ($REMOTE_ADDR == "") {
$ip = "no ip";
} else {
$ip = getHostByAddr($REMOTE_ADDR);
}
brackets are needed to enclose what you want to do if the condition is true
No puedo pensar en ningún idioma que requiera esto
puedes hacer otras declaraciones como esta:
<?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 puedes escribir if - 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 la sintaxis alternativa 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 vuelve muy complicado muy rápido y no recomendaré su uso (excepto tal vez para la plantilla-lógica).
y para completarlo:
<?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;
?>