我对指南以及如何命名文件感到困惑。
1。)Vendor
\<Vendor Name>\(<Namespace>\)*<Class Name>
的含义
2.。)如果我命名空间AnimalsApp
并且有一个abstract class Dog
,我是否将GermanShepherd
等具体类放在他们自己的文件夹中?
即。 AnimalsApp\Dog\GermanShepherd\GermanShepherd.php
或AnimalsApp\Dog\GermanShepherd.php
?
此外,我是否将Dog.php
包含在GermanShepherd.php
文件中,还是由自动加载器加载到我这里加载所有内容?
3.。)命名空间的所有子类是否需要在每个文件的顶部都有命名空间?
4.。)<Class Name>
是<Interface>
的同义词吗?当你有class MyClass extends MyAbstract implements MyInterface
之类的东西时呢?你把文件放在哪里?
答案 0 :(得分: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
。
此外,我是否在GermanShepherd.php文件中包含Dog.php,还是由自动装带器为我加载一切?
由自动加载器决定。
命名空间的所有子类是否需要在每个文件的顶部都有命名空间?
命名空间没有子类,包含类。假设这就是你的意思,那么答案是肯定的,因为如果命名空间不在那里,那么根据定义,类不包含在其中。
这里
<Class Name>
是<Interface>
的同义词吗?当你有类MyClass扩展时,MyAbstract实现了MyInterface。你把文件放在哪里?
以完全相同的方式处理接口和类。