PHP命名空间组织,命名

时间:2011-04-27 21:35:44

标签: php namespaces naming-conventions php-5.3

我遇到以下问题:

  • 我有一个名称空间Exception\*, 其中包含几种类型 异常。

  • 我有一个名称空间Exception\User\*,其中包含一个 特定种类的例外 (ForbiddenLoggedOut ...)。

我在哪里放置 User 基本异常类,由ForbiddenLoggedOut扩展:

  • Exception\User,即在Exception\*命名空间(更好的全名)?
  • Exception\User\User,即Exception\User\*命名空间(更一致)?
  • Exception\User\Exception,即我将其重命名为Exception\User\*名称空间的“基本”例外(奇怪)?

注意:User异常类不是抽象的。

精确度:我使用了一个带例外的例子,这只是一个例子。我真的很想知道在命名空间树中放置/如何命名基类的位置。

谢谢,如果你能帮助我的话!

2 个答案:

答案 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