首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写器包,自动加载非类文件

编写器包,自动加载非类文件
EN

Stack Overflow用户
提问于 2013-04-29 07:55:48
回答 1查看 22.8K关注 0票数 24

在深入研究Composer包论github的源代码时,我注意到有些php文件与名称空间名称相匹配,但前面有一个下划线。我迷惑不解地拉下了包(通过Composer),并注意到编写器生成required的类加载器显式地生成了这些突出显示的文件,而不是像我预期的那样自动加载。

例如,在crunch/regular-expression包中有一个名为Crunch\RegularExpression的命名空间

代码语言:javascript
复制
-- src
---- Crunch
------- RegularExpression       <-- folder containing classes
------- _RegularExpression.php  <-- file namespace to Crunch/RegularExpression
                                    containing functions and constants 
                                    (instead of a class)

起初,我认为这些突出显示的文件是我忽略的PSR-0的一个特性,但随后我查看了作曲家生成的autoload_real.php,并发现_RegularExpression.php (以及其他文件)是明确需要的:

代码语言:javascript
复制
…
$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中加载。

代码语言:javascript
复制
"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"
    ]
}

文件上的下划线是一种惯例,用来将它们从类定义中描述出来,并且在自动标注中没有特殊的用途。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-29 08:40:05

作曲家不以任何特殊的方式对待这些文件。在本例中,包作者将此用作存储函数的某种约定。

这些文件是由Composer要求的,因为它们被定义为“file”autoload 在composer.json中,而不是因为文件名上的一些黑魔法。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16273746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档