## Why is this an issue?

When the execution is not explicitly terminated at the end of a switch case, it continues to execute the statements of the following case. While this is sometimes intentional, it often is a mistake which leads to unexpected behavior.

### Noncompliant code example

    switch ($myVariable) {
      case 1:
        foo();
        break;
      case 2:  // Both 'doSomething()' and 'doSomethingElse()' will be executed. Is it on purpose ?
        do_something();
      default:
        do_something_else();
       break;
    }

### Compliant solution

    switch ($myVariable) {
      case 1:
        foo();
        break;
      case 2:
        do_something();
        break;
      default:
        do_something_else();
       break;
    }

### Exceptions

This rule is relaxed in following cases:

    switch ($myVariable) {
      case 0:                  // Empty case used to specify the same behavior for a group of cases.
      case 1:
        do_something();
        break;
      case 2:                  // Use of continue statement
        continue;
      case 3:                  // Case includes a jump statement (exit, return, break &etc)
        exit(0);
      case 4:
        echo 'Second case, which falls through';
        // no break        <- comment is used when fall-through is intentional in a non-empty case body
      default:                 // For the last case, use of break statement is optional
        doSomethingElse();
    }

## Resources

- CWE - CWE-484 - Omitted Break Statement in Switch