在单个文件中自动加载类的编写器


Autoload with composer of classes inside a single file

我正在尝试使用一个使用名称空间的库,但有一部分代码自动生成,因此它们在单个文件中生成多个类。

我们使用composer,我尝试在psr-4中添加像这样的命名空间定义

"name'space'prefix'": "folder/where/the/file/is"

但是只有一个文件包含自动加载内的所有类没有找到类,我想,它搜索与你试图加载的类同名的文件。有没有一种方法可以让composer自动加载意识到这种情况,并在类中使用自动加载?

除了PSR-4(或PSR-0)之外,您还有两个其他选项:

  1. classmap -这将扫描目录或文件中包含的所有类,并将结果放入文件中的PHP数组中。这需要在扫描的文件发生变化时转储自动加载程序。
  2. files -只要包含Composer自动加载器,就会包含上述文件。

因此,您可以添加带有自动生成类的文件,并使用classmap自动加载器进行扫描,它将在第一次使用其中的任何类时加载该文件,或者您可以将其添加到文件的自动加载中,这将始终包含,无论是否使用类。

如果考虑性能,首选第一种选择,除非类的数量非常大,而类中的代码数量很少。在classmap中包含大量的小类可能比总是首先加载它们带来更多的开销。

在这些类中有大量的代码,并且它们并不总是被使用,不总是加载它们所节省的数量或内存可能会更快。

如果有疑问:测量它。如果性能损失太大,可以考虑将这些类拆分到单个文件中,并使用PSR-4。

PSR4规范规定:

终止类名对应于以.php结尾的文件名。文件名必须与终止类名的大小写匹配。

由于自动生成的代码不兼容PSR4,它不能被PSR4自动加载器自动加载。我会修复生成类的代码,或者使用require_once。(首选第一种。