0

我对指南以及如何命名文件有点困惑。

1.) 是什么Vendor意思\<Vendor Name>\(<Namespace>\)*<Class Name>

2.)如果我命名命名空间AnimalsApp并有一个abstract class Dog​​ ,我是否将具体的类GermanShepherd放在他们自己的文件夹中?

IE。AnimalsApp\Dog\GermanShepherd\GermanShepherd.php还是AnimalsApp\Dog\GermanShepherd.php

此外,我是否将其包含Dog.phpGermanShepherd.php文件中,还是由自动加载器为我加载所有内容?

3.) 命名空间的所有子类都需要在每个文件的顶部都有命名空间吗?

4.) 是这里<Class Name>的同义词<Interface>吗?当你有类似的东西时怎么办class MyClass extends MyAbstract implements MyInterface。你把文件放在哪里?

4

1 回答 1

2

Vendor 是什么意思\<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 时呢?你把文件放在哪里?

以完全相同的方式处理接口和类。

于 2014-01-30T11:24:44.707 回答