【发布时间】:2018-02-20 05:54:06
【问题描述】:
在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,而不单独捕获它们。我认为可能的解决方案是:
- 让这个对象直接抛出
\MyApp\MyAppExeption异常。这味道不对。 - 将
\MyApp\MyAppExeption异常注入此对象。对此也不确定。 - 在我遇到
MyAppExeption的每个地方都在一个街区中捕获\MyApp\Callbacks\CallbackException。不这么认为。 - 围绕它创建一些包装器。听起来这可能是最好的,但我不知道如何实现它。
请指教。谢谢
【问题讨论】:
-
你为什么觉得有必要这样做?
-
如果您从 \MyApp\MyAppException 扩展您的个人回调异常,并捕获 \MyApp\MyAppException,那么它也会捕获您的任何个人异常
-
@Federkun 哪个部分?不单独抓他们?如果这样,只是为了减少代码重复。您是否同意我的解决方案 #1 和 #2 可能是坏主意?
-
@MarkBaker 虽然我碰巧是回调类的作者,但情况可能并非总是如此,并且对这是否是一种更灵活的方法感兴趣。如果我要扩展它们,为什么不修改所有回调类并让它们直接抛出`\MyApp\MyAppException`?
-
为什么不首先捕获异常,这样您就可以在一个简单的捕获中捕获所有内容...。您没有指出回调都是由不同的人编写的,因此不能' 不会在您的环境中更改,即使它们都属于同一个 MyApp 命名空间
标签: php exception namespaces