Я обрабатываю исключения способом, подобным eventHandling в Javascript.Событие поднимается вверх по лестнице от конкретного к общему.Когда оно достигает стартовой программы, исключение теряет весь свой смысл для кода и должно быть просто перехвачено для регистрации и завершения приложения.
Тем временем может случиться много вещей
CallStack:
- Стартовый обед
- Ешьте яблоко (До этого кода яблоко покупалось как обед)
- Раковина зубов в яблоке
Когда я ел яблоко, появился червь:
throw NausiaException('I found a bleeding worm...');
Ешьте сферу Apple, ловит
catch(Exception $e)
исключение, потому что в этой области мы можем вернуть яблоко в магазин и кричатьу менеджера.Поскольку ничего более полезного нельзя сказать о происшествии, вызывается
throw $e
, потому что съесть яблоко не удалось.
Что-то могло измениться Однако, еслиМенеджер магазина отказался возместить, вы можете обернуть исключение
throw new RefundFailedException('The manager is a cheap skate', RefundFailedException::REFUSED, $e)
Начало ланча Сфера Начало ланча Сфера хочет выбросить плохой ланч
try {
//Start lunch
} catch (Exception $e) {
switch (true) {
case $e instanceof NausiaException:
case $e instanceof RefundFailedException:
//Throw lunch away
break;
}
}