我遇到以下问题:
我有一个名称空间Exception\*
,
其中包含几种类型
异常。
我有一个名称空间Exception\User\*
,其中包含一个
特定种类的例外
(Forbidden
,LoggedOut
...)。
我在哪里放置 User
基本异常类,由Forbidden
和LoggedOut
扩展:
Exception\User
,即在Exception\*
命名空间(更好的全名)?Exception\User\User
,即Exception\User\*
命名空间(更一致)?Exception\User\Exception
,即我将其重命名为Exception\User\*
名称空间的“基本”例外(奇怪)?注意:User
异常类不是抽象的。
精确度:我使用了一个带例外的例子,这只是一个例子。我真的很想知道在命名空间树中放置/如何命名基类的位置。
谢谢,如果你能帮助我的话!
答案 0 :(得分:3)
您如何设计代码取决于您自己。然而,有些人已经考虑过这个并定义了PSR-0 standard。毕竟你的概念似乎不是很有用。如果命名空间\My\Space
中出现问题(我认为),每个人都会期望来自此命名空间的异常。如果原因和异常本身之间存在逻辑联系,则更容易设计相应的try-catch
- 子句。
try {
$x = new \My\Space\Class;
$x->doSomething();
} catch (\My\Space\SomethingWentWrongException $e) {
// something went wrong
} catch (\My\Space\Exception $e) {
// something unexpected from this namespace went wrong
}
更新(反映问题的精确度):
我认为,有(可以说)2.5种方式;)您可以将基类放在命名空间中,通常使用/实现/扩展,例如, *\Filter\FilterInterface
和*\Filter\ConcreteFilter
。另一个解决方案是将它放在一个级别(*\Filter
)并在接口/基类之后命名子命名空间,或者只是将其命名为其他(这就是半解决方案)。我更喜欢最后一个,例如interface *\Filter
和具体的类*\filters\SomeFilter
(是的,我的命名空间是小写的;)。)
重点是,你坚持自己的决定。不要混淆多个“风格”。
答案 1 :(得分:1)
Exception\User
Exception\User\Forbidden
Exception\User\LoggedOut