簡體   English   中英

PHP - 在同一個 try-catch 中包裝一個變量塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM