PHP - 在同一个 try-catch 中包装一个变量 block

标签 php error-handling code-reuse

在我的 PHP 项目中,我使用 Guzzle 发出许多不同的 API 请求。为了处理所有异常,每个 API 调用都包装在一个 try-catch block 中。一个例子:

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

对于每个请求,异常处理是相同的,但实际执行 block 有很大不同,不能简单地用一组选项来描述。

有没有办法创建一个能够将自定义执行 block 包装到相同的 try-catch 处理中的函数/类?

我想出的唯一选择是使用带有函数的接口(interface)execution()由每个 child 和一个函数 run() 扩展具有 try-catch block 并简单地调用 $this->execution()在执行 block 内。它会起作用,但我发现为每个不同的 API 调用创建一个全新的类太冗长了,而这些 API 调用只在我的项目的一个点中使用。

是否有更好/更简洁的解决方案来避免相同异常处理的代码重复?

最佳答案

传递一个可调用对象,可以是 an anonymous function, a regular function, or a class method :

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(...);
});

关于PHP - 在同一个 try-catch 中包装一个变量 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53777969/

相关文章:

error-handling - ServiceFabric : Service does not exist during deployment

reactjs - React 功能组件继承

java - 在 AngularJS 代码中使用 JSP C 标签

javascript - 我如何最好地重用菜单的 html 代码

php - 在php中输出json数组

javascript - 在 JQuery Ajax 请求中将 PHP 变量作为 URL 访问

javascript - Gmail 中使用图像标签跟踪电子邮件?

php - php中的货币格式?

bash - bash/expect 脚本中的错误处理

javascript - 由于错误的错误处理,表单数据未插入数据库