Details

    • Type: Language-Specification
    • Status: Active
    • Resolution: Unresolved
    • Labels:
    • Impact:
      Unknown 'null' severity
    • Likelihood:
      Unknown 'null' severity

      Description

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

        Attachments

          Activity

            People

            Assignee:
            Unassigned Unassigned
            Reporter:
            pierre-yves.nicolas Pierre-Yves Nicolas
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Dates

              Created:
              Updated: