PSR-4 自动加载如何在自定义库的作曲器中工作


How does PSR-4 autoloading work in composer for custom libraries?

我基于对PHP中命名空间工作原理的理解使用以下目录结构:

project_root
    app/
    |    lib/
    |    |    MyCompany/
    |    |    |    Utility/
    |    |    |    |    Logger.php
    |    |    |    Core/
    |    |    |    |    User.php
vendor/
    composer/
    symfony/
    guzzle/
bootstrap.php
composer.json

根据 PSR-4 规范,完全限定的类名具有以下形式:

'<NamespaceName>('<SubNamespaceNames>)*'<ClassName>

问题1:

从我上面的目录结构来看,下面的假设是否正确?

  • 命名空间名称 = 我的公司
  • 子命名空间名称 = 实用程序 |核心
  • 类名 = 记录器 |用户

问题2:

如果我的引导程序.php文件包含以下内容:

<?php
require 'vendor/autoload.php';

如何配置 composer.json 的"自动加载"部分以自动加载 MyCompany 目录中的类?这样我就可以在引导中创建记录器的实例.php

取自您链接的文档:

{
    "autoload": {
        "psr-4": {
            "MyCompany''": "app/lib/MyCompany/",
        }
    }
}

这是不言自明的,它只是告诉自动加载器app/lib/MyCompanyMyCompany'命名空间的根。

然后,您将能够将该类用作'MyCompany'Utility'Logger

请注意,在 PSR-4 中,

与 PSR-0 不同,您通常会从目录结构中省略MyCompany,而只使用 app/lib/