转换不同命名空间之间的异常

时间:2018-02-18 14:57:10

标签: php exception namespaces

MyApp命名空间中,我有以下内容:

$class='MyApp\Callbacks\\'.$class;
$this->callback[$callBackId]=new $class();

此对象位于MyApp\Callbacks命名空间中,可能会引发CallbackException\MyApp\Callbacks\CallbackException)异常。

我发现自己经常做以下事情:

try {
    $this->callback[$callBackId]->someMethod();
}
catch(\MyApp\Callbacks\CallbackException $e) {
    throw new MyAppExeption($e->getMessage(),$e->getCode());    
}

如何将这些例外转换为MyAppException而不单独捕获它们。我在想可能的解决方案是:

  1. 让此对象直接抛出\MyApp\MyAppExeption例外。这闻起来没气味。
  2. \MyApp\MyAppExeption异常注入此对象。也不确定。
  3. 在我抓住的每个地方\MyApp\Callbacks\CallbackException抓住MyAppExeption。不要这么认为。
  4. 围绕它创建一些包装器。听起来这可能是最好的,但我不确定如何实现它。
  5. 请指教。感谢

1 个答案:

答案 0 :(得分:0)

我目前只需要公开几种方法,所以我对它们进行了硬编码。如果我以后想要更多,可能会包装在一个类中并使用__invoke

class MyApp
{
    private $callbacks;

    public function __construct($callbacks)
    {
        $this->callbacks=$callbacks;
    }

    public function someMethod($x,$y) {
        try {
            $this->someMethod($x,$y);
        }
        catch(\MyApp\Callbacks\CallbackException $e) {
            //Modify if desired
            throw new MyAppExeption($e->getMessage(),$e->getCode());    
        }
    }
}