## Why is this an issue?

Exceptions handlers (`catch`) are evaluated in the order they are written. Once a match is found, the evaluation stops.

In some contexts a `catch` block is dead code as it will never catch any exception:

- If there is a handler for a base class followed by a handler for class derived from that base class, the second handler will never trigger: the handler for the base class will match the derived class, and will be the only executed handler.
- When multiple `catch` blocks try to catch the same exception class, only the first one will be executed.

This rule raises an issue when a `catch` block catches every exception before a later `catch` block could catch it.

### Noncompliant code example

    class MyException extends Exception {}
    class MySubException extends MyException {}

    try {
      doSomething();
    } catch (MyException $e) {
      echo $e;
    } catch (MySubException $e) { // Noncompliant: MySubException is a subclass of MyException
      echo "Never executed";
    }

### Compliant solution

    class MyException extends Exception {}
    class MySubException extends MyException {}

    try {
      doSomething();
    } catch (MySubException $e) {
      echo "Executed";
    } catch (MyException $e) {
      echo $e;
    }