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