elseif/else if

(PHP 4, PHP 5, PHP 7)

elseif, jak sama nazwa wskazuje, jest kombinacją if oraz else. Tak jak else, rozszerza konstrukcję if, aby wykonać inne wyrażenie w wypadku gdy oryginalne wyrażenie if przyjmuje wartość FALSE. Jednakże, w odróżnieniu od else, to alternatywne wyrażenie zostanie wykonane tylko jeżeli wyrażenie warunkowe elseif otrzyma wartość TRUE. Przykładowo, poniższy kod wyświetli a jest większe niż b, a jest równe b or a jest mniejsze niż b:

<?php
if ($a $b) {
    echo 
"a jest większe niż b";
} elseif (
$a == $b) {
    echo 
"a jest równe b";
} else {
    echo 
"a jest mniejsze niż b";
}
?>

Można użyć kilku bloków elseif z jedną konstrukcją if. Zostanie wykonane pierwsze wyrażenie elseif (jeżeli jakiekolwiek w ogóle), które przyjmuje wartość TRUE. W PHP możesz także użyć zapisu 'else if' (dwa słowa) i zachowanie będzie identyczne jak przy 'elseif' (jednym słowie). Znaczenie syntaktyczne obu z nich, różni się (jeżeli znasz C, to tutaj występuje to samo zachowanie), ale istotne jest to, że oba w rezultacie zachowają się tak samo.

Wyrażenie elseif jest wykonywane tylko jeżeli poprzedzający if i wszystkie poprzedzające elseif przyjęły wartość FALSE, a obecny elseif przyjął TRUE.

Informacja: Zauważ, że elseif i else if zostaną uznane za jednakowe, jeżeli zostaną użyte nawiasy klamrowe, jak w powyższym przykładzie. Jeśli użyjesz dwukropka do zdefiniowana warunków if/elseif, nie możesz rozdzielać else if na dwa słowa albo PHP napotka błąd parsowania.

<?php

/* Niepoprawna metoda: */
if ($a $b):
    echo 
$a." jest większe niż ".$b;
else if (
$a == $b): // Nie zostanie skompilowane.
    
echo "Powyższa linia powoduje błąd parsera.";
endif;


/* Poprawna metoda: */
if ($a $b):
    echo 
$a." jest większe niż ".$b;
elseif (
$a == $b): // Zauważ połączenie słów.
    
echo $a." jest równe ".$b;
else:
    echo 
$a." nie jest większe ani równe ".$b;
endif;

?>

add a note add a note

User Contributed Notes 3 notes

up
38
Vladimir Kornea
13 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.
up
15
qualitycoder
5 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;
?>
up
-108
Anonymous
3 years ago
If you find yourself using a lot of "elseif"s like this

<?php
if ($a > $b) {
    echo
"a is bigger than b";
} elseif (
$a == $b) {
    echo
"a is equal to b";
} elseif (...) {
    echo
"...";
} elseif (...) {
    echo
"...";
} elseif (...) {
    echo
"";
} elseif (...) {
    echo
"";
} else {
    echo
"a is smaller than b";
}
?>

then you should look at using switch instead:
http://php.net/manual/en/control-structures.switch.php
To Top