title: Method overriding and following SOLID principles
body: <p>I have a parent class and a child class as follows:</p>
  <pre><code>class Request {
    public function handleException() : array {
      throw new Exception( 'RequestException' );
    }
  }
  </code></pre>
  <pre><code>class SpecialRequest extends Request {
    public function handleException() : array {
      if (condition) {
        return [];
      }
      parent::handleException();
    }
  }
  </code></pre>
  <p>I have 2 request classes and has a handleException method that's meant to return an array. My idea is that the parent class would only throw exceptions (because it doesn't know how to handle them). While child classes would be allowed to override the parent method to handle certain cases and throw the parent exception otherwise.</p>
  <p>Following SOLID principles, I should not change the method signatures when overriding. But looking at the parent method, it seems odd that the method has an array return type, when it's basically just throwing an exception.</p>
  <p>Is there anything wrong with the classes?</p>