Рассмотрим следующий код, где я хочу создать новое исключение, чтобы обернуть «предыдущие» исключения, которые я только что перехватил.
try {
doSomething();
}
catch (SomethingException $eSomething) {
try {
rollback();
}
catch (RollbackException $eRollback) {
throw new SomethingRollbackException('Copying failed, rollback failed.', null, $eSomething, $eRollback);
}
}
В какой-то момент у меня есть два исключения, которые я хотел бы передать как «$ previous», при создании нового исключения.
Но изначально поддерживается только одно «предыдущее исключение».
Варианты, которые я могу придумать до сих пор:
Создайте свой собственный класс исключений, который принимает дополнительное «предыдущее» исключение. — Да скажем SomethingRollbackException
Хранить это как частную собственность? — Да, но дело вкуса
С аксессором? — Да смотри выше
Как бы я сделал код вызова, чтобы заботиться о дополнительной информации? — что-то вроде этого:
if ($exception instanceof SomethingRollbackException) {
// at this point you know $exception has 2 previous exceptions
}
или же
try {
// ....
} catch(SomethingRollbackException $e) {
// at this point you know $exception has 2 previous exceptions
}
Других решений пока нет …