@phpcoder81

Как работать с несколькими исключениями?

Есть два класса. Оба выбрасывают исключение, если что-то пошло не так.
Нужно оборачивать каждый класс, или оба друг под друга в одно условие tru cach?
  • Вопрос задан
  • 73 просмотра
Решения вопроса 2
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
Все зависит от того, являются ли оба класса вместе частью одного слоя или это взаимодействие между разными слоями.

В первом случае исключения можно объединить одним интерфейсом (или родительским исключением). И на этом обобщенном исключении завязываться в другом слое.
Пример

class FirstException extend ModuleException {}
class SecondException extend ModuleException {}

class ModuleFirst 
{
     public function work()
     {
          throw new FirstException('first);
     }
}
class ModuleSecond 
{
     public function work()
     {
          throw new SecondException('second);
     }
}

тогда дальше ловить из слоя можно так
try {
    $module->work();
} catch(ModuleException $e) {
     // обработка
}


Если взаимодействие между слоями, то оборачивать каждый раз и выбрасывать свое дальше.
Пример

class FirstException {}
class SecondException {}

class ModuleFirst 
{
     public function work()
     {
         try {
            $module2->work();
        } catch(SecondException $e) {
             throw new FirstException($e->getMessage, 0, $e);
        }
     }
}

class ModuleSecond 
{
     public function work()
     {
          throw new SecondException('second);
     }
}


try {
     $module1->work();
} catch(FirstException $e) {
    // обработка
}

Ответ написан
@FanatPHP
Чебуратор тега PHP
Ни то ни другое

Надо наконец-то понять, что ловля исключения не имеет никакого отношения к выбрасыванию.
Если какой-то код может бросить исключение, это не значит что его надо обязательно заворачивать в трай кетч.
В современном пхп любая строчка может кинуть исключение. Будешь каждую строчку заворачивать?

Трай кетчи пишут не потому что какой-то код кидает исключение, а в зависимости от того, что планируется с ним делать.
Если есть понимание что делать с исключением, то сразу станет понятно куда писать трй кетч.
Если нет понимания - то никакого трай кетч писать не надо
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы