condicionais de PHP, suportes necessários?
-
22-08-2019 - |
Pergunta
Eu estava navegando em um fórum e alguém perguntou sobre um arquivo PHP que tinham encontrado na web. Ele tem vários pontos como este no código:
if ($REMOTE_ADDR == "") $ip = "no ip";
else $ip = getHostByAddr($REMOTE_ADDR);
Eu sempre pensei suportes são necessários para colocar o que você quer fazer se a condição for verdadeira. Existe alguma outra alternativa, como se ele estiver na mesma linha que você não?
Há também uma outra linha como esta:
if ($action != ""):
mail("$adminaddress","Visitor Comment from YOUR SITE",
Meu instinto é dizer que este não iria funcionar, mas eu também não sei se ele é um arquivo PHP ultrapassada e que costumava trabalho?
Solução
você pode fazer se 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
?>
e então você também pode escrever se - outra coisa em uma sintaxe 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;
?>
com a sintaxe alternativa, você também pode cair fora do modo de analisar como esta:
<?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;
?>
Mas isso fica realmente confuso muito rápido e eu não recomendo de uso (exceto talvez para o modelo-logic).
e para completá-lo:
<?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;
?>
Outras dicas
Para entrar em um pouco mais detalhadamente, pela razão de que as chaves são opcionais é que a sintaxe se parece com:
if(CONDITION) BLOCK
[elseif(CONDITION) BLOCK]
[else BLOCK]
bloco pode ser uma única instrução:
foo();
ou pode ser um grupo fechado-chave das demonstrações:
{
foo();
bar();
}
Na minha opinião
if ($REMOTE_ADDR == "") $ip = "no ip"; else $ip = getHostByAddr($REMOTE_ADDR);
é válido, mas muito mais difícil de ler do que:
if ($REMOTE_ADDR == "") {
$ip = "no ip";
} else {
$ip = getHostByAddr($REMOTE_ADDR);
}
9 anos e eu estou surpreso que ninguém mencionou o ternário operador :
$ip = ($REMOTE_ADDR == "") ? "no ip" : getHostByAddr($REMOTE_ADDR);
Muito mais claro para IMHO atribuição -. Porque ele leva para fora com a variável a ser atribuído, como para atribuição de variável habitual
Chaves (não entre colchetes) são opcionais em PHP, como na maioria dos C-como sintaxe. Talvez você esteja pensando em Perl; eles são necessários lá, para que a forma de se sintaxe.
O cólon é uma forma alternativa de controlo estrutura que suporta PHP. Eu odeio isso, mas algumas pessoas (principalmente os designers de sistemas modelo, aparentemente) amá-lo.
Sim, excluindo as chaves é permitido, embora muitas vezes tenho ouvido 2 razões para não usar essa sintaxe:
- É mais difícil de ler. Menos óbvio para outro programador.
- Se você nunca wany de acrescentar algo no interior do caso, então você precisa adicionar as chaves que é mais difícil depois que o então quando você estiver primeira codificação desde que a maioria dos editores irá adicionar a chave de fechamento para você.
Além disso, sim, a sintaxe cólon é válido. As alternativas podem ser encontrados aqui: http://php.net/manual /en/control-structures.alternative-syntax.php
brackets are needed to enclose what you want to do if the condition is true
Eu não consigo pensar em qualquer linguagem que requer este