使用单个文件中的类作曲家自动加载
Posted
技术标签:
【中文标题】使用单个文件中的类作曲家自动加载【英文标题】:Autoload with composer of classes inside a single file 【发布时间】:2014-10-11 03:08:24 【问题描述】:我正在尝试使用一个使用命名空间但有一部分代码自动生成的库,因此它们在单个文件中生成多个类。
我们使用composer,我尝试像这样在psr-4中添加命名空间定义
"name\space\prefix\": "folder/where/the/file/is"
但是只有一个文件包含自动加载中的所有类,我想它没有找到这些类,因为它会搜索与您尝试加载的类同名的文件。有没有办法让作曲家自动加载知道这种情况并在类中使用自动加载?
【问题讨论】:
【参考方案1】:除了 PSR-4(或 PSR-0)之外,您还有两个选择:
classmap
- 这将扫描目录或文件中包含的所有类,并将结果放入文件中的 php 数组中。这需要在对正在扫描的文件进行更改时转储自动加载器。
files
- 只要包含 Composer 自动加载器,就会包含提到的文件。
因此,您可以添加带有要使用类映射自动加载器扫描的自动生成类的文件,这将在第一次使用其中的任何类时加载该文件,或者您可以将其添加到文件自动加载中,这无论是否使用类,都将始终包含在内。
如果考虑性能,除非类的数量很大并且类中的代码量很小,否则首选第一种选择。在类映射中拥有大量小类可能比一开始就加载它们的开销更大。
在这些类中有大量代码,而且它们并不总是被使用,不总是加载它们所节省的数量或内存可能会更快。
如果有疑问:测量它。如果性能损失太大,请考虑将类拆分为单个文件并使用 PSR-4。
【讨论】:
谢谢,尽管我已经有了自动拆分脚本来生成单个类,但您的回答为我提供了更多自动加载这些类的选项。非常感谢! 不错。不知道这个。 谢谢!我喜欢这个:“如果有疑问:测量它。”【参考方案2】:PSR4 spec 说:
终止类名对应于以 .php 结尾的文件名。文件名必须与终止类名的大小写匹配。
由于自动生成的代码与 PSR4 不兼容,因此 PSR4 自动加载器无法自动加载它。我会修复生成类的代码,或者使用require_once
..(首选第一个。
【讨论】:
谢谢,问题是我无法更改自动生成的源代码的来源,我可以将文件拆分为类文件,但每次我都需要这样做更新这个库。不过谢谢你的回答 如果您之后要拆分它们,您可以创建一个小的包装脚本,它首先执行生成器,然后在单个命令中将输出拆分为多个文件 是的,我正在考虑这个解决方案 :) 谢谢以上是关于使用单个文件中的类作曲家自动加载的主要内容,如果未能解决你的问题,请参考以下文章