## Why is this an issue?

This rule applies whenever an `if` statement is followed by one or more `else if` statements; the final `else if` should be followed by an `else` statement.

The requirement for a final `else` statement is defensive programming.

The `else` statement should either take appropriate action or contain a suitable comment as to why no action is taken. This is consistent with the requirement to have a final `default` clause in a `switch` statement.

### Noncompliant code example

    if (condition1) {
      do_something();
    } elseif (condition2) {
      do_something_else();
    }

### Compliant solution

    if (condition1) {
      do_something();
    } elseif (condition2) {
      do_something_else();
    } else {
      throw new InvalidArgumentException('message');
    }

### Exceptions

When all branches of an `if-elseif` end with `return`, `break`, `continue` or `throw`, the code that comes after the `if` implicitly behaves as if it was in an `else` clause. This rule will therefore ignore that case.