gpt4 book ai didi

PHP 命名空间组织、命名

转载 作者:行者123 更新时间:2023-12-04 16:51:06 29 4
gpt4 key购买 nike

我面临以下问题:

  • 我有一个命名空间 Exception\* ,
    其中包含多种类型
    异常(exception)。
  • 我有一个命名空间 Exception\User\* ,其中包含一个
    特定类型的异常
    ( Forbidden , LoggedOut ...)。

  • 我把 放在哪里User 基本异常类,由 Forbidden 扩展和 LoggedOut :
  • Exception\User ,即在 Exception\*命名空间(更好的全名)?
  • Exception\User\User ,即在 Exception\User\*命名空间(更一致)?
  • Exception\User\Exception ,即我将其重命名为 Exception\User\* 的“基本”异常命名空间(奇怪)?

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

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

    如果你能帮助我,谢谢!

    最佳答案

    您如何设计代码完全取决于您。然而,有一些人已经想到了这一点并定义了PSR-0 standard .你的概念似乎不太有用。如果命名空间中出现问题 \My\Space (我认为)每个人都希望这个命名空间有一个异常(exception)。设计相应的try-catch更容易-clauses,如果原因和异常本身之间存在逻辑联系。

    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
    }

    更新(反射(reflect)问题中的精度):

    我认为,有(可以说)2.5 种方式;) 您可以将基类放在 namespace 中,通常在 namespace 中使用/实现/扩展,例如 *\Filter\FilterInterface*\Filter\ConcreteFilter .另一种解决方案是将其提高一级( *\Filter ),并在接口(interface)/基类之后命名子命名空间,或者仅将其命名为其他名称(这就是一半的解决方案)。我更喜欢最后一个,例如界面 *\Filter和一个具体的类 *\filters\SomeFilter (是的,我的命名空间是小写的 ;))。

    重点是,你坚持你的决定。不要混淆多个“样式”。

    关于PHP 命名空间组织、命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5810902/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com