[英]PHP - Wrap a variable block in the same 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()
擴展的函數execution()
和一個具有 try-catch 塊的函數run()
並在$this->execution()
簡單地調用$this->execution()
堵塞。 它可以工作,但我發現為每個不同的 API 調用創建一個全新的類過於冗長,而這些 API 僅在我的項目的一個點中使用。
是否有更好/更簡潔的解決方案來避免相同異常處理的代碼重復?
傳遞一個可調用對象,它可以是匿名函數、常規函數或類方法:
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(...);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.