PHP命名空间目录结构

时间:2013-11-25 17:03:46

标签: php namespaces

据我了解,名称空间声明如下:vendor\module\classname

目录结构将是:

/Acme
    /Module1
        /src
            /Module1
                /Class.php

实例化该类的有效方法是:new Acme\Module1\Class();

我的假设是否正确?如果是这样,使用src文件夹有什么好处?

1 个答案:

答案 0 :(得分:9)

惯例。

如果你正在使用作曲家,并且想要自动加载你的课程,看起来你正在尝试进行PSR-0自动加载。

所以如果你有"Acme": "src/"

然后在与composer.json文件相同的目录中将是一个src文件夹,并且在src文件夹中将是一个Acme文件夹。该文件夹中的所有文件都是名称空间Acme;并且该文件夹的子目录中的所有文件都是namespace Acme\Subdirectory;

在控制台中,每次更改composer.json文件的自动加载部分时,都需要键入composer dump-autoload。 (或者每次将新文件添加到自动加载的目录时,对于类映射自动加载。)这会导致更新composer生成的文件。 (您可以在vendor / composer目录中找到这些文件。)

因此,如果有一个src / Acme / Subdirectory / ClassName.php,其中一个类名为ClassName,那么要实例化该类,您可以键入new \Acme\Subdirectory\ClassName();

编辑:所以如果这是你的composer.json文件

{
    "autoload": {
        "psr-0": {
            "Acme": "src/"
        }
    }
}

然后您的目录结构将是这样的

/ProjectRoot
    composer.json
    /src
        /Acme
            /Module1
                Class.php

您可以通过输入

来创建课程的新实例
new \Acme\Module1\Class();