elseif/else if
(PHP 4, PHP 5, PHP 7, PHP 8)
elseif
, como o nome sugere, é uma combinação
do if
e else
. Como o
else
, estende um if
para executar instruções diferentes no caso da expressão
if
original ser avaliada como
false
. Entretanto, diferentemente do
else
, executará uma expressão alternativa
somente se a expressão condicional do elseif
for avaliada como true
. Por exemplo, o código
a seguir exibirá a é maior que
b, a é igual a b
ou a é menor que b:
Pode haver vários elseif
s dentro da mesma instrução
if
. A primeira expressão
elseif
(se houver) que retornar
true
será executada. No PHP, pode-se escrever
else if
(em duas palavras), e o comportamento será idêntico
ao do elseif
(em uma única palavra). O significado sintático
é um pouco diferente (se você está familiarizado com C, mas, no final,
ambos terão exatamente o mesmo comportamento.
O elseif
só é executado se o
if
precedente ou qualquer
elseif
for avaliado como
false
, e o elseif
corrente for avaliado como
true
.
Nota:
Note que o elseif
e else if
só serão considerados exatamente iguais se usados com chaves
como no exemplo abaixo. Ao utilizar os dois pontos (:) para definir as
condições de if
/elseif
, então o uso
de elseif
como uma única palavras se torna necessário, ou o PHP
falhará com um erro de interpretação se else if
estiver separado em duas palavras.
Vladimir Kornea ¶17 years ago
The parser doesn't handle mixing alternative if syntaxes as reasonably as possible.
The following is illegal (as it should be):
<?
if($a):
echo $a;
else {
echo $c;
}
?>
This is also illegal (as it should be):
<?
if($a) {
echo $a;
}
else:
echo $c;
endif;
?>
But since the two alternative if syntaxes are not interchangeable, it's reasonable to expect that the parser wouldn't try matching else statements using one style to if statement using the alternative style. In other words, one would expect that this would work:
<?
if($a):
echo $a;
if($b) {
echo $b;
}
else:
echo $c;
endif;
?>
Instead of concluding that the else statement was intended to match the if($b) statement (and erroring out), the parser could match the else statement to the if($a) statement, which shares its syntax.
While it's understandable that the PHP developers don't consider this a bug, or don't consider it a bug worth their time, jsimlo was right to point out that mixing alternative if syntaxes might lead to unexpected results.