2011-04-27 208 views
2

我面臨着以下問題:PHP命名空間的組織,命名

  • 我有一個命名空間Exception\*, 其中包含了幾種類型的 例外。

  • 我有一個命名空間Exception\User\*,其中包含了 特定類型的異常 (ForbiddenLoggedOut ...)。

我在哪裏把User基本異常類,通過ForbiddenLoggedOut擴展:

  • Exception\User,即在Exception\*命名空間(更好的全名)?
  • Exception\User\User,即在Exception\User\*命名空間(更一致)?
  • Exception\User\Exception,即我將其重命名爲Exception\User\*命名空間(奇怪)的「基本」異常?

注意:User異常類不是抽象的。

精度:我使用了一個有例外的例子,這只是一個例子。我真的很想知道如何在名稱空間樹中放置/如何命名基類。

謝謝,如果你能幫助我!

回答

1
Exception\User 
Exception\User\Forbidden 
Exception\User\LoggedOut 
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),並在接口/基類後面命名子命名空間,或者將其命名爲其他東西(即半解決方案)。我更喜歡最後一個,例如界面*\Filter和具體類*\filters\SomeFilter(是的,我的命名空間是小寫的;))。

重點是,你堅持你的決定。不要混淆多個「風格」。

+0

「異常」的事情只是一個例子,我不知道在哪裏放置我的異常,但將基類放在名稱空間樹中。我會更正問題,以便更清楚。 – 2011-04-27 22:02:42

+0

剛剛更新了我的答案。 – KingCrunch 2011-04-27 22:15:47