39 lines
1.2 KiB
Plaintext
39 lines
1.2 KiB
Plaintext
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;
|
|
}
|
|
----
|