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 ¶16 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.
mparsa1372 at gmail dot com ¶2 years ago
The if...elseif...else statement executes different codes for more than two conditions.
Syntax:
if (condition) {
code to be executed if this condition is true;
} elseif (condition) {
code to be executed if first condition is false and this condition is true;
} else {
code to be executed if all conditions are false;
}
Example:
Output "Have a good morning!" if the current time is less than 10, and "Have a good day!" if the current time is less than 20. Otherwise it will output "Have a good night!":
<?php
$t = date("H");
if ($t < "10") {
echo "Have a good morning!";
} elseif ($t < "20") {
echo "Have a good day!";
} else {
echo "Have a good night!";
}
?>
qualitycoder ¶9 years ago
The reason 'else if' (with a space) works with traditional syntax and not colon syntax is because of a technicality.
<?php
if($var == 'Whatever') {
} else if($var == 'Something Else') {
}
?>
In this instance, the 'else if' is a shorthand/inline else statement (no curly braces) with the if statement as a body. It is the same things as:
<?php
if($var == 'Whatever') {
} else {
if($var == 'Something Else') {
}
}
?>
If you were to write this with colon syntax, it would be:
<?php
if($var == 'Whatever'):
else:
if($var == 'Something Else'):
endif;
endif;
?>