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
}
对于每个请求,异常处理都是相同的,但实际执行块差异很大,不能简单地用一组选项来描述。
有没有办法创建一个 function/class 能够将自定义执行块包装到相同的 try-catch 处理中?
我想出的唯一选择是使用一个接口,该接口具有一个由每个 child 扩展的函数 execution()
和一个具有 [=28= 的函数 run()
] 块并简单地在执行块内调用 $this->execution()
。它会工作,但我发现为每个不同的 API 调用创建一个全新的 class 太冗长了,它只在我的项目的一个点中使用。
是否有 better/less 冗长的解决方案来避免相同异常处理的代码重复?
传递一个可调用对象,可以是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 项目中,我使用 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
}
对于每个请求,异常处理都是相同的,但实际执行块差异很大,不能简单地用一组选项来描述。
有没有办法创建一个 function/class 能够将自定义执行块包装到相同的 try-catch 处理中?
我想出的唯一选择是使用一个接口,该接口具有一个由每个 child 扩展的函数 execution()
和一个具有 [=28= 的函数 run()
] 块并简单地在执行块内调用 $this->execution()
。它会工作,但我发现为每个不同的 API 调用创建一个全新的 class 太冗长了,它只在我的项目的一个点中使用。
是否有 better/less 冗长的解决方案来避免相同异常处理的代码重复?
传递一个可调用对象,可以是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(...);
});