обработка ошибок — Оберните блок переменной в том же try-catch

В моем PHP-проекте я использую Guzzle для выполнения множества различных API-запросов. Для обработки всех исключений каждый вызов API заключен в блок try-catch. Пример:

        try {
$res = $client->get($url, [
'headers' => [
'Authorization' => "bearer " . $jwt,
]
]);
} catch (ClientException $clientException) {
// Do stuff
} catch (ConnectException $connectException) {
// Do stuff
}catch (RequestException $requestException){
// Do stuff
}

Для каждого запроса обработка исключений одинакова, но фактический блок выполнения сильно отличается и не может быть просто описан массивом опций.

Есть ли способ создать функцию / класс, способный обернуть пользовательский блок выполнения в ту же обработку try-catch?

Единственные варианты, которые я придумал, — это использовать интерфейс с функцией execution() который расширяется каждым ребенком и функцией run() который имеет блоки try-catch и просто вызывает $this->execution() внутри исполнительного блока. Это бы сработало, но я нашел слишком многословным создание целого нового класса для каждого отдельного вызова API, который используется только в одной точке моего проекта.

Есть ли лучшее / менее подробное решение, позволяющее избежать повторения кода при обработке одной и той же исключительной ситуации?

0

Решение

Передайте вызываемый, который может быть анонимные функции, обычная функция или метод класса:

function executeGuzzle(callable $fun) {
try {
return $fun();
} catch (ClientException $clientException) {
// Do stuff
} catch (ConnectException $connectException) {
// Do stuff
} catch (RequestException $requestException) {
// Do stuff
}
}

$res = executeGuzzle(function () use ($client) {
return $client->get(...);
});
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector