gpt4 book ai didi

php - Composer 包,自动加载非基于类的文件

转载 作者:IT王子 更新时间:2023-10-28 23:53:38 26 4
gpt4 key购买 nike

当我深入研究 Composer 包的源代码时 on github我注意到有一些 php 文件与 namespace 名称相匹配 但前面有一个下划线。感到困惑的是,我(通过 Composer)拉下了这个包,并注意到 Composer 生成的类加载器需要显式地获取这些带下划线的文件,而不是像我预期的那样自动加载。

例如,在 crunch/regular-expression 包中有一个名为Crunch\RegularExpression:

-- src
---- Crunch
------- RegularExpression <-- folder containing classes
------- _RegularExpression.php <-- file namespace to Crunch/RegularExpression
containing functions and constants
(instead of a class)

最初我认为这些带下划线的文件是我错过的 PSR-0 的一个特性,但后来我查看了 Composer 生成的 autoload_real.php 并看到了 _RegularExpression.php(除其他外)被明确要求:


$loader->register(true);

require $baseDir . '/src/Crunch/_RegularExpression.php';
require $baseDir . '/src/Crunch/RegularExpression/_Modifier.php';
require $baseDir . '/src/Crunch/RegularExpression/Pattern/_Modifier.php';
require $baseDir . '/src/Crunch/RegularExpression/Pattern/_Assertion.php';

return $loader;

无法找到任何关于 Composer 的此功能的有意义的文档。它是导出非基于类的命名空间依赖项(如函数和常量)的良好“标准”吗?

更新

我的问题原来有点用词不当。选择的答案让我发现可以在 composer.json 中显式声明基于非类的 Assets 以加载:

"autoload": {
"psr-0": { "Crunch\\RegularExpression": "src" },
"files": [
"src/Crunch/_RegularExpression.php",
"src/Crunch/RegularExpression/_Modifier.php",
"src/Crunch/RegularExpression/Pattern/_Modifier.php",
"src/Crunch/RegularExpression/Pattern/_Assertion.php"
]
}

文件上的下划线是用来将它们与类定义区分开来的约定,在自动加载中没有特殊用途。

最佳答案

Composer 不会以任何特殊方式处理这些文件。在这种情况下,包作者使用它作为某种约定来存储函数。

Composer 需要这些文件,因为它们被定义为"file"自动加载 in the composer.json ,不是因为文件名上有一些黑魔法。

关于php - Composer 包,自动加载非基于类的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com