我已将以下内容添加到我的composer.json
文件。这工作正常,但我有一个很长的子命名空间列表(例如Apple、Orange、Lemon、Pear、Banana...等),我想包括在内。
1)我是否必须指示每个子命名空间或者是否有快捷方式,例如。"Pure\\*": "pure"
作曲家.json:
"autoload": {
"psr-4": {
"Pure\\": "pure",
"Pure\\Apple\\": "pure/src/Pure/Apple",
"Pure\\Orange\\": "pure/src/Pure/Orange",
"Pure\\Lemon\\": "pure/src/Pure/Lemon"
}
}
2)是否最好包含自定义自动加载文件:
作曲家.json:
"autoload": {
"files": [
"pure/src/Pure/autoload.php"
]
}
自动加载.php:
spl_autoload_register(function ($class) {
//etc...
}
我是否必须指示每个子命名空间或者是否有快捷方式
声明自动加载时,应使用尽可能长或合理的前缀。
如果此示例包是您创建的唯一一个,并且是唯一使用Pure
作为名称空间,如果多个子目录中较长的前缀数量太多,请使用该名称空间。但是,这假设您正在使用的世界上任何其他包都应该避免使用相同的命名空间执行相同的操作。
Composer 将能够在所有可用目录中搜索子命名空间,即如果您有两个包,其中一个表示Pure
是可以在pure/src/Pure
,另一个说Pure
is in code/stuff
,Composer会尝试寻找一个类Pure\Something\Class
首先在这些目录之一中,如果找不到,则必须尝试第二个目录。作曲家会记住是否pure/src/Pure/Something
目录存在并避免查找以以下内容开头的任何内容Pure\Something
如果必须加载该名称空间中的第二个类。
但从代码组织的角度来看,一个包应该只提供一组定义的名称空间,并且其他包不应该在同一名称空间中提供类。您可能会意外地将相同的类添加到两个包中,并遇到有趣的问题,如果两个文件不同,这些问题可能难以调试。
包含自定义自动加载文件是否更好:
不,不惜一切代价避免它。您不会从中获得任何好处,因为文件总是需要加载,并且它是占用一些内存的重复代码 - 您已经拥有 Composer 的自动加载器。如果您的代码不符合 PSR-4 或 PSR-0,则可以使用类映射。对于新代码:仅使用 PSR-4!
此外,Composer 无法优化您的自定义自动加载器。尽管任何优化都应该衡量有效性(请阅读我对此的详细回答:如果类映射实际上更快,为什么要在 Composer 中使用 PSR-0 或 PSR-4 自动加载?),如果有好处的话,使用您自己的自动加载器将完全阻止您的代码被优化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)