203

Are elseif and else if completely synonymous, or is there a difference?

Does Zend have an accepted "standard" on which one to use?

While I personally dislike seeing elseif in the code, I just need to know if they're synonymous and the PHP manual isn't the easiest to search.

dreftymac
  • 31,404
  • 26
  • 119
  • 182
Theodore R. Smith
  • 21,848
  • 12
  • 65
  • 91

3 Answers3

246

From the PHP manual:

In PHP, you can also write 'else if' (in two words) and the behavior would be identical to the one of 'elseif' (in a single word). The syntactic meaning is slightly different (if you're familiar with C, this is the same behavior) but the bottom line is that both would result in exactly the same behavior.

Essentially, they will behave the same, but else if is technically equivalent to a nested structure like so:

if (first_condition)
{

}
else
{
  if (second_condition)
  {

  }
}

The manual also notes:

Note that elseif and else if will only be considered exactly the same when using curly brackets as in the above example. When using a colon to define your if/elseif conditions, you must not separate else if into two words, or PHP will fail with a parse error.

Which means that in the normal control structure form (ie. using braces):

if (first_condition)
{

}
elseif (second_condition)
{

}

either elseif or else if can be used. However, if you use the alternate syntax, you must use elseif:

if (first_condition):
  // ...
elseif (second_condition):
  // ...
endif;
Daniel Vandersluis
  • 91,582
  • 23
  • 169
  • 153
  • 18
    Good job with the example snippets. If anything, the alternate syntax is all that's necessary to prove that PHP simply treats `else if` as `else { if {`. – BoltClock Sep 07 '10 at 20:36
  • 2
    PHP doesn't treat `else if` as `else { if {`, otherwise you wouldn't able to do `if (0) { } else if (0) { } else { }`... – Guido Hendriks Jul 10 '15 at 14:05
  • 4
    @GuidoHendriks: it's not that one is treated as the other, it's that they're functionally equivalent. Your example is equivalent to the nested form `if (0) { } else { if (0) { } else { } }`. Note there's no ambiguity in the last `else` block, which is always the case for complete branches (every `if` has an `else`). – outis Jul 16 '15 at 20:55
  • Here's another example for reference http://php.net/manual/en/control-structures.elseif.php#115851 – WhyAyala Aug 10 '17 at 14:44
  • With alternate synyax you just have to remember 'colon' and endif of inner if:`if ($v1='1'): do_thing(); else: if($v1='b' ): do_another_thing(); else: do_smthing_else(); endif; endif;` is the equivalent of; `if ($v1='1'): do_thing(); elseif($v1='b' ): do_another_thing(); else: do_smthing_else(); endif;` – DDS Aug 21 '19 at 15:27
53

The Framework Interoperability Group (FIG) which is made up of members that include the developers of Zend ( https://github.com/php-fig/fig-standards#voting-members ) , put together a series of Standard recommendations (PSR-#).

Zend2 and Symfony2 already follows PSR-0.

There's no hard and fast rules for styles, but you can try and follow as much of PSR-2 as you can.

There's a comment on else if vs elseif in PSR-2:

The keyword elseif SHOULD be used instead of else if so that all control keywords look like single words.

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

Some of the recommendations are just that, recommendations. It's up to you whether to use else if or elseif

James Cowhen
  • 2,837
  • 3
  • 24
  • 32
  • 5
    Thank you very much for pointing out the keywords-as-one-word guideline. – Theodore R. Smith Dec 14 '12 at 17:20
  • So the recommondation implies that `else if` is a single control keyword that just happens to *look* like multiple words. – Robert Aug 10 '21 at 20:00
  • No, the coding guide style recommends using `elseif` to make all control words "single-words" over `else if`, which happens to behave exactly in the same way, but breaks the symmetry the author of the guide is looking for. – Rafael Dantas Sep 20 '22 at 08:29
-2

Yes, "elseif" and "else if" both are synonymous, alike in meaning and significance. You can mix "else if" with "elseif" together.

For Example - We can use "else if" and "elseif" together.
if($condition){
  ...
}
else if($condition){
  ...
}
elseif($condition){
  ...
}

Nested:
if($condition){
  ...
}
else if($condition){
  if($condition){
    ...
  }
  elseif($condition){
    ...
  }
}
Shakti
  • 1
  • 1
  • Why was this downvoted? Is it incorrect, or is it seen to be encouraging inconsistent programming practice, or is it just not seen as contributing any useful information that isn't in the question? – mwfearnley Aug 30 '23 at 08:38