Привет.
Прочитав несколько статей на Хабре, просветления по
правильному использованию исключений не пришло. Скорее даже есть вопросы по организации кода, в котором используются Exceptions. Ниже приведен код с комментариями для иллюстрации вопросов. Названия классов и методов случайны и в данном случае не важны.
Итак, я вызываю метод, который может бросать исключения:
try {
User::getById(1);
} catch (Exception $exception) {
// Какие-то действия, например, вывести сообщение и завершить работу:
print $exception->getMessage();
exit;
}
Метод User::getById() в свою очередь может вызывать другие методы, которые так же могут вызывать исключения:
Class User()
{
public function getById()
{
Profile::someMethod(1);
}
}
Class Profile()
{
public function someMethod($param)
{
if ($param == 1) {
throw new Exception();
}
}
}
Вопрос:
Нужно ли оборачивать вызов метода someMethod() в try...catch и пробрасывать исключение дальше?
try {
Profile::someMethod(1);
} catch (Exception $exception) {
throw $exception;
}
или в этом нет необходимости?
Второй вопрос - продолжение первого: где бросать исключение, в вызываемом методе или вызывающем? Например, код выше можно переписать вот так:
Class Profile()
{
public function anotherMethod($param)
{
if ($param == 1) {
return false;
}
return true;
}
}
Class User()
{
public function getById()
{
if (Profile::anotherMethod(1) === fasle) {
throw new Exception();
}
}
}
Как правильно? Или это дело вкуса?