CascadiaPHP 2024

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:

<?php
if ($a > $b) {
echo
"a é maior que b";
} elseif (
$a == $b) {
echo
"a é igual a b";
} else {
echo
"a é menor que b";
}
?>

Pode haver vários elseifs 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.

<?php

/* Método Incorreto: */
if ($a > $b):
echo
$a." é maior que ".$b;
else if (
$a == $b): // Não irá compilar.
echo "A linha acima causa um erro de análise.";
endif;


/* Método Correto: */
if ($a > $b):
echo
$a." é maior que ".$b;
elseif (
$a == $b): // Note a combinação das palavras.
echo $a." é igual a ".$b;
else:
echo
$a." não é maior nem igual a ".$b;
endif;

?>

add a note

User Contributed Notes 1 note

up
-12
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.
To Top