PHP - 跨类方法重用相同行为的模式

PHP - pattern to reuse same behavior across class methods

提问人:fudo 提问时间:8/25/2023 更新时间:8/26/2023 访问量:48

问:

我正在编写一个服务类,该类使用 Guzzle 结束对某些 api 端点的调用。

我最终编写了这些方法,其中包含基本相同的 Guzzle 异常处理,即:

class ServiceClass {

    public function getMethod(){
        try {
            $response = $guzzleClient->get("some/url");
            // some business logic
            return $data;
        }
        catch(ClientException $e) {
            // handle exception
        }
        catch(RequestException $e) {
            // handle exception
        }
    }

    public function postMethod(){
        try {
            $response = $guzzleClient->post("another/url", [/* some data */]);
            // other business logic
            return;
        }
        catch(ClientException $e) {
            // handle exception
        }
        catch(RequestException $e) {
            // handle exception
        }
    }
}

由于每个端点的行为都相同,尽管是 POST 或 GET,即在发生错误的情况下,它们会返回完全相同的响应体结构(例如错误数组),我想知道是否有一种方法可以“扩展”每个方法以重用相同的逻辑并隔离相关的单个业务逻辑。try-catch

php OOP 方法-代码- 重用

评论

1赞 CBroe 8/25/2023
您在 catch 块执行的操作可能来自 include,也可以是函数/方法调用 - 但您不能“拆分”try-catch 本身。相反,如果你不认为这太丑陋的话,你可以做的是编写一个方法,将请求方法作为参数传递,然后在$guzzleClient实例上进行“变量方法调用”。但是,如果您需要传递不同数量的参数,那仍然需要以某种方式进行处理。
0赞 fudo 8/25/2023
@CBroe我已经尝试了几个解决方案,其中一个是这个,但明天 Guzzle 添加另一个异常类来处理我仍然需要编辑任何方法来更新该部分。我并不是说这不是一个有效的解决方案,我只是说我正在寻找一个更好的解决方案,如果它存在的话。catch
0赞 Florian Wolters 8/25/2023
我建议阅读有关模板方法行为设计模式的信息。您的问题可以通过使用标准的面向对象编程 (OOP) 技术来解决。无需复制异常处理程序。

答: 暂无答案