== 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 [source,php] ---- 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 [source,php] ---- class MyException extends Exception {} class MySubException extends MyException {} try { doSomething(); } catch (MySubException $e) { echo "Executed"; } catch (MyException $e) { echo $e; } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) include::../highlighting.adoc[] ''' == Comments And Links (visible only on this page) include::../comments-and-links.adoc[] endif::env-github,rspecator-view[]