如何通过保持 WordPress 命名约定来处理 composer 的自动加载?

How to handle autoloading with composer by keeping the WordPress naming conventions?

我有点困惑,因为我正在使用 composer 为 WordPress 编写插件,因为这是真正的方法。

所以我在我的插件和其他一些东西中创建了一个作曲家文件。在作曲家文件中,我添加了用于自动加载的名称空间:

"autoload": {
  "psr-4": {
    "Johnny\Lolkick\": [
      "includes/classes/"
    ]
  }
}

在我的 classes 文件夹中,我现在创建了一个名为 class-main.php 的 class。由于 WordPress 命名约定,我决定使用这个名称:

https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#naming-conventions

class 本身被命名为 class Main {。在我的基本插件文件中,我现在创建了一个失败的 class 的新实例。将文件名更改为 Main.php 后它起作用了。

因此 WordPress 命名约定破坏了 composer 的自动加载。我现在想知道你是如何处理这个问题的?我应该如何使用 composer 来保持命名约定?

由于您的代码库与 PSR-4 autoloading, a psr-4 映射不兼容,您 composer.json 的自动加载部分将无法工作,如您所见。

我会说你在这里有两个选择:

第一个是使用 classmap 代替:

{
    "autoload": {
        "classmap": ["includes/classes/"]
    }
}

这将简单地递归地解析该文件夹中的所有文件,并将 classes 映射到它们的名称,无论您遵循什么命名方案。

第二个是构建您自己的自动加载器,并使用 files 使其自动加载:

{
    "autoload": {
        "files": ["includes/autoloader.php"]
    }
}

当引用给定的 class 名称时,该自动加载器必须定义应该发生什么(应该加载或不加载哪个 class)。

在这两种情况下,不要忘记 运行 composer dump-autoload 之后。