PHP命名空间目录结构

ryy*_*ryy 3 php namespaces

我的理解是命名空间声明如下:vendor\module\classname.

目录结构将是:

/Acme
    /Module1
        /src
            /Module1
                /Class.php
Run Code Online (Sandbox Code Playgroud)

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

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

ech*_*ber 9

通常是公约.

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

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

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

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

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

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

{
    "autoload": {
        "psr-0": {
            "Acme": "src/"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么你的目录结构就是这样的

/ProjectRoot
    composer.json
    /src
        /Acme
            /Module1
                Class.php
Run Code Online (Sandbox Code Playgroud)

您可以通过键入来创建类的新实例

new \Acme\Module1\Class();
Run Code Online (Sandbox Code Playgroud)