我有一个类在其构造函数中接收一些初始化值并使用它们来实现接口。我的代码从这个类创建了几个对象,具有不同的初始化值。
每当其中一个方法发生异常时,stacktrace就会显示哪个类和方法抛出异常,但不会显示哪个对象。
因此,我想包装每个异常,为我的类留下一些额外的信息,包括在其构造函数中接收的对象的原始初始化值。这应该发生在我自己抛出的异常(非常简单)和运行时抛出的异常(例如NPE)以及我的类使用的库中。
当然,我可以在try / catch中包装每个公共方法:
public function whatever(...)
{
try {
// ...
} catch (\Throwable $e) {
throw $this->wrapException($e);
}
}
但是将这4行添加到每个公共方法并将每个方法的主体缩进到一个级别,只是为了获得更多可读的堆栈跟踪,违反了DRY principle并且非常难看。
有更好的方法吗?一个通用的OOP设计模式,或者可能是一些可以解决这个问题的特定于PHP的技巧,比如魔术方法名称?