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:

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;
}