Переопределение конструктора нарушает LSP?
Добавлено: 2017.05.03, 22:06
Допустим, я хочу запихнуть в исключение какой-то массив полезных данных.
Позже эти данные будут обработаны при отлове исключения.
Что-то вроде
Нет ничего проще, наследуем новый класс от стандартного Exception.
Всё работает. Но при этом, как я понимаю, нарушается LSP.
Ведь конструктор переписан, и уже нельзя создать исключение "по-старому".
Но имеет ли это значение, если мой код 100% должен использовать MoneyException только с массивом, и никак иначе?
Если строго следовать LSP, то класс должен выглядеть так
А вызов вот так
Но это же некрасиво. Везде эти "null, 0, null" будут мозолить глаза.
Кто что думает? Можно так нарушать?
Позже эти данные будут обработаны при отлове исключения.
Что-то вроде
Код: Выделить всё
throw new MoneyException(['cost' => $cost, 'overflow' => true]);
Код: Выделить всё
class MoneyException extends \Exception
{
public $error;
public function __construct(array $error)
{
parent::__construct();
$this->error = $error;
}
}
Ведь конструктор переписан, и уже нельзя создать исключение "по-старому".
Код: Выделить всё
throw new MoneyException('Big bad overflow');
Если строго следовать LSP, то класс должен выглядеть так
Код: Выделить всё
class MoneyException extends \Exception
{
public $error;
public function __construct($message = null, $code = 0, Exception $previous = null, array $error = [])
{
parent::__construct();
$this->error = $error;
}
}
Код: Выделить всё
throw new MoneyException(null, 0, null, ['cost' => $cost, 'overflow' => true]);
Кто что думает? Можно так нарушать?