"Elseif" e "else if" são completamente sinônimos?

170

São elseife else ifcompletamente sinônimos, ou há alguma diferença?

O Zend tem um "padrão" aceito em qual usar?

Embora eu pessoalmente não goste de ver elseifo código, só preciso saber se eles são sinônimos e o manual do PHP não é o mais fácil de pesquisar.

Theodore R. Smith
fonte
10
A else ifpropósito, nem todas as outras línguas usam . Por exemplo, o VB também usa ElseIfe Ruby elsif.
Daniel Vandersluis
6
e shell / bash usa elif
knittl
7
python também usa elif
gregghz

Respostas:

218

No manual do PHP :

No PHP, você também pode escrever 'else if' (em duas palavras) e o comportamento seria idêntico ao de 'elseif' (em uma única palavra). O significado sintático é um pouco diferente (se você estiver familiarizado com C, esse é o mesmo comportamento), mas a conclusão é que ambos resultariam exatamente no mesmo comportamento.

Essencialmente, eles se comportarão da mesma forma, mas else ifé tecnicamente equivalente a uma estrutura aninhada como esta:

if (first_condition)
{

}
else
{
  if (second_condition)
  {

  }
}

O manual também observa:

Observe que elseif e else if serão considerados exatamente iguais ao usar colchetes, como no exemplo acima. Ao usar dois pontos para definir suas condições if / elseif, você não deve separar else if em duas palavras, ou o PHP falhará com um erro de análise.

O que significa que, na forma normal da estrutura de controle (por exemplo, usando chaves):

if (first_condition)
{

}
elseif (second_condition)
{

}

ambos elseifou else ifpode ser utilizada. No entanto, se você usar a sintaxe alternativa , deverá usar elseif:

if (first_condition):
  // ...
elseif (second_condition):
  // ...
endif;
Daniel Vandersluis
fonte
18
Bom trabalho com os trechos de exemplo. Se alguma coisa, a sintaxe alternativa é tudo o que é necessário para provar que o PHP simplesmente trata else ifcomo else { if {.
BoltClock
2
PHP não tratar else ifcomo else { if {, caso contrário não faria capaz de fazer if (0) { } else if (0) { } else { }...
Guido Hendriks
4
@GuidoHendriks: não é que um seja tratado como o outro, é que eles são funcionalmente equivalentes. Seu exemplo é equivalente ao formulário aninhado if (0) { } else { if (0) { } else { } }. Observe que não há ambiguidade no último elsebloco, que é sempre o caso de ramificações completas (cada ifuma possui uma else).
Outis
Aqui está outro exemplo de referência: php.net/manual/en/control-structures.elseif.php#115851
WhyAyala
Com synyax alternativo, você apenas precisa lembrar 'colon' e endif de inner if: if ($v1='1'): do_thing(); else: if($v1='b' ): do_another_thing(); else: do_smthing_else(); endif; endif; é o equivalente de; if ($v1='1'): do_thing(); elseif($v1='b' ): do_another_thing(); else: do_smthing_else(); endif;
DDS
47

O Framework Interoperability Group (FIG), composto por membros que incluem os desenvolvedores do Zend ( https://github.com/php-fig/fig-standards#voting-members ), reúne uma série de recomendações padrão (PSR - #)

O Zend2 e o Symfony2 já seguem o PSR-0.

Não há regras rígidas e rápidas para estilos, mas você pode tentar seguir o máximo possível do PSR-2.

Há um comentário sobre else if vs elseif no PSR-2:

A palavra-chave elseif DEVE ser usada em vez de else, para que todas as palavras-chave de controle pareçam palavras únicas.

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#51-if-elseif-else

Algumas das recomendações são apenas isso, recomendações. Cabe a você optar por usar else if ou elseif

James Cowhen
fonte
4
Muito obrigado por apontar as diretrizes de palavras-chave como uma palavra.
Theodore R. Smith