Autoload My Classes with Sub-Namespaces (Composer.json)(使用子命名空间自动加载我的类 (Composer.json))
问题描述
我已将以下内容添加到我的 composer.json
文件中.这很好用,但我有一长串想要包含的子命名空间(例如 Apple、Orange、Lemon、Pear、Banana... 等).
I've added the following to my composer.json
file. This works fine but I have a long list of sub-namespaces (eg. Apple, Orange, Lemon, Pear, Banana... etc) that I want to include.
1) 我必须指出每个子命名空间还是有快捷方式,例如."纯\*": "纯"
1) Do I have to indicate each sub-namespace or is there a shortcut eg. "Pure\*": "pure"
composer.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) 包含自定义自动加载文件是否更好:
2) Is it better to include a custom autoload file instead:
composer.json:
"autoload": {
"files": [
"pure/src/Pure/autoload.php"
]
}
autoload.php:
spl_autoload_register(function ($class) {
//etc...
}
推荐答案
我必须指出每个子命名空间还是有快捷方式
Do I have to indicate each sub-namespace or is there a shortcut
在声明自动加载时,应使用尽可能长或合理的前缀.
When declaring the autoloading, you should use the longest possible or reasonable prefix.
如果这个示例包是您创建的唯一一个,并且它是唯一一个使用 Pure
作为命名空间的包,如果多个子目录中较长前缀的数量过多,请继续使用.但是,这假设您正在使用的世界上任何其他包都应该避免使用相同的命名空间做同样的事情.
If this example package is the only one you are ever creating, and it is the only one using Pure
as the namespace, go with that if the number of longer prefixes in several subdirectories is too high. However, this assumes that any other package in the world that you are using should avoid doing the same thing with the same namespace.
Composer 将能够在所有可用目录中搜索子命名空间,即如果您有两个包,其中一个说 Pure
可以在 pure/src/Pure中找到code>,而另一个说
Pure
在 code/stuff
中,Composer 将尝试在其中一个中找到一个类 PureSomethingClass
这些目录首先,然后必须尝试第二个,如果它没有找到它.Composer 会记住 pure/src/Pure/Something
目录是否存在,如果必须加载该命名空间中的第二个类,则避免在那里查找以 PureSomething
开头的任何内容.
Composer will be able to search for sub namespaces in all available directories, i.e. if you have two packages, and one says Pure
is to be found in pure/src/Pure
, and the other says Pure
is in code/stuff
, Composer will try to find a class PureSomethingClass
in one of these directories first, then has to try the second one if it does not find it. Composer will remember whether the pure/src/Pure/Something
directory exists and avoid looking for anything starting with PureSomething
there if a second class in that namespace has to be loaded.
但是从代码组织的角度来看,一个包应该只提供一组定义的命名空间,而其他任何包都不应该在同一命名空间中提供类.您可能会不小心将同一个类添加到两个包中,如果两个文件不同,可能会遇到一些难以调试的有趣问题.
But from a code organization standpoint, one package should only ever provide a defined set of namespaces, and no other package should provide classes in the same namespace. You could accidentially add the same class into two packages and get interesting problems that may be hard to debug if the two files are different.
包含自定义自动加载文件是否更好:
Is it better to include a custom autoload file instead:
不,不惜一切代价避免它.您不会从中获得任何好处,因为文件总是必须被加载,并且它是占用一些内存的重复代码 - 您已经拥有 Composer 的自动加载器.如果您有不符合 PSR-4 或 PSR-0 的代码,则可以使用类映射.对于新代码:仅使用 PSR-4!
No, avoid it at all cost. You won't get any benefit from this because the file always has to be loaded, and it is duplicate code that occupies some memory - you already have the autoloader from Composer. If you have code that does not conform to PSR-4 or PSR-0, you can use a classmap. For new code: Use PSR-4 only!
此外,您的自定义自动加载器无法通过 Composer 进行优化.尽管应该衡量任何优化的有效性(阅读我对此的详细回答:如果 classmap 实际上更快,为什么要在 composer 中使用 PSR-0 或 PSR-4 自动加载?),使用您自己的自动加载器会完全阻止你的代码被优化,如果它是有益的.
Also, your custom autoloader cannot be optimized by Composer. Although any optimization should be measured for effectiveness (read my detailed answer on this: Why use a PSR-0 or PSR-4 autoload in composer if classmap is actually faster?), using your own autoloader will entirely prevent your code from being optimized if it would be beneficial.
这篇关于使用子命名空间自动加载我的类 (Composer.json)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用子命名空间自动加载我的类 (Composer.json)
- 如何定位 php.ini 文件 (xampp) 2022-01-01
- Mod使用GET变量将子域重写为PHP 2021-01-01
- SoapClient 设置自定义 HTTP Header 2021-01-01
- 从 PHP 中的输入表单获取日期 2022-01-01
- Laravel 仓库 2022-01-01
- Oracle 即时客户端 DYLD_LIBRARY_PATH 错误 2022-01-01
- 没有作曲家的 PSR4 自动加载 2022-01-01
- 正确分离 PHP 中的逻辑/样式 2021-01-01
- PHP Count 布尔数组中真值的数量 2021-01-01
- 带有通配符的 Laravel 验证器 2021-01-01