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 规范,完全限定的 class 名称具有以下形式:

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

问题 1:

根据我上面的目录结构,下面的假设是否正确?

问题二:

如果我的 bootstrap.php 文件包含以下内容:

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

我如何 configure the 'autoload' composer.json 部分自动加载 MyCompany 目录中的 classes?这样我就可以在 bootstrap.php

中创建一个 Logger 实例

取自您链接的文档:

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

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

然后您就可以将 class 用作 \MyCompany\Utility\Logger

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