У меня есть родительский класс и дочерний класс следующим образом:
class Request {
public function handleException() : array {
throw new Exception( 'RequestException' );
}
}
class SpecialRequest extends Request {
public function handleException() : array {
if (condition) {
return [];
}
parent::handleException();
}
}
У меня есть 2 класса запросов и метод handleException, который предназначен для возврата массива. Моя идея состоит в том, что родительский класс будет генерировать только исключения (потому что он не знает, как с ними обращаться). В то время как дочерним классам будет разрешено переопределять родительский метод для обработки определенных случаев и генерировать родительское исключение в противном случае.
Следуя принципам SOLID, я не должен менять сигнатуры методов при переопределении. Но глядя на родительский метод, кажется странным, что метод имеет тип возвращаемого значения массива, когда он просто генерирует исключение.
Что-то не так с классами?
Request::handleException()
abstract
, сделает ли этот метод менее странным? Вы фактически заставляете каждый наследующий класс реализовать свою собственную обработку исключения, что должно быть сделано в любом случае, еслиRequest
сам не знает, как обрабатывать исключение. - person noam   schedule 30.06.2020