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?

Foi útil?

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:

  1. É mais difícil de ler. Menos óbvio para outro programador.
  2. 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top