2014-01-30 37 views
0

我對指南以及如何命名文件有點困惑。我應該如何根據PSR-0來組織我的文件?

1)什麼是Vendor意味着\<Vendor Name>\(<Namespace>\)*<Class Name>

2)如果我的名字命名空間AnimalsApp並有abstract class Dog,做我把具體的類如GermanShepherd在自己的文件夾?

即。 AnimalsApp\Dog\GermanShepherd\GermanShepherd.phpAnimalsApp\Dog\GermanShepherd.php

此外,我是否將Dog.php包含在GermanShepherd.php文件中,還是由自動加載器爲我加載所有內容?

3.)命名空間的所有子類都需要在每個文件的頂部有名稱空間嗎?

4.)<Class Name>是否代表<Interface>在這裏?什麼時候你有什麼像class MyClass extends MyAbstract implements MyInterface。你把這些文件放在哪裏?

回答

2

是什麼意思廠商在\<Vendor Name>\(<Namespace>\)*<Class Name>

沒什麼特別的。其重要性在於相對路徑的所有其他部分都完全由源代碼指定,因此「在您的控制之外」。供應商前綴是允許你有一個類Vendor1\Animals\Dog和我有一個類Vendor2\Animals\Dog和這兩個類不會衝突,如果他們碰巧在同一個應用程序中使用。

實踐中:選擇標識自己或組織的內容。它可以是任何你喜歡的東西,但是因爲這個想法是「不太可能被其他人挑選出來的」,所以相應地做出決定。

如果我命名命名空間AnimalsApp並且有一個抽象類Dog,是否將具體的類如GermanShepherd放在它們自己的文件夾中?

您將具體的類放在其名稱空間指定的地方。如果完全合格的班級名稱是AnimalsApp\Dog\GermanShepherd,那麼您將其放入目錄AnimalsApp\Dog。如果FQCN是AnimalsApp\GermanShepherd那麼你把它放在AnimalsApp裏面。

我應該提一下,上述兩個例子似乎都不太可能和/或表示不好的選擇; FQCN應該大概就像AnimalsApp\Animals\GermanShepherd

此外,我是否將Dog.php包含在GermanShepherd.php文件中,還是由自動加載器爲我加載所有內容?

這取決於自動裝載機。

命名空間的所有子類都需要在每個文件的頂部有名稱空間嗎?

命名空間不具有亞,它含有類。假設這就是你的意思,那麼答案是肯定的,因爲如果命名空間不存在,那麼根據定義,類不包含在其中。

<Class Name>是否代表<Interface>在這裏?當你有類MyClass之類的東西時,如何擴展MyAbstract來實現MyInterface。你把這些文件放在哪裏?

以完全相同的方式處理接口和類。

+0

「我應該提到,上述兩個例子似乎都不太可能和/或表示不好的選擇。」 你能解釋這是爲什麼嗎?我的意思是,GermanShepherd只能是Dog類的一個子集,對吧? – tgun926

+1

@ tgun926:不論是'GermanShepherd'派生還是不派生'Dog'都無關緊要。重要的是它聲明瞭哪個名稱空間。由於'Dog'最有可能是類的名稱,而不是名稱空間的名稱,因此它永遠不會顯示爲目錄名稱。 – Jon

+0

乾杯!只需要澄清一下供應商前綴 - 如果在同一應用程序中使用它的工作不會導致衝突,那麼它是否與名稱空間具有完全相同的工作? – tgun926

相關問題