Enterprise 版本
PHPStan — 深度参考
- 一个公共类:
EditionBoundaryRule,一个作用于use语句的自定义 PHPStan 规则。 - 强制执行单向的版本依赖顺序。Core 绝不导入 Pro 或 Enterprise。Pro 绝不导入 Enterprise。
- 违规会在出问题的
use行上报告标识符nextpdf.editionBoundaryViolation。 - 仅在构建期生效。该规则没有运行时路径,对生成的 PDF 没有任何影响。
- 随
nextpdf/enterprise发行。注册采用标准的 PHPStan 配置。
可用性与授权
标题为“可用性与授权”的章节此能力随 NextPDF Enterprise(nextpdf/enterprise)发行,并通过 Enterprise 级授权信封激活。它是一个构建期的静态分析规则,没有运行时路径:由 nextpdf/enterprise 包边界对其加以门控,且它不携带单独的逐功能能力代码。Core 与 Pro 不发行任何对等物。比较各版本并获取授权。
公共 API 接口面
标题为“公共 API 接口面”的章节先安装该包,然后在 PHPStan 配置中注册该规则。
composer require nextpdf/enterprise:^3rules: - NextPDF\Enterprise\PHPStan\EditionBoundaryRule| 符号 | 参数 | 默认行为 | 返回 | 抛出或失败于 | 备注 |
|---|---|---|---|---|---|
EditionBoundaryRule | 无(无构造函数参数) | 订阅 use 语句的无状态 PHPStan 规则 | — | 从不抛出 | final;在 Use_ 之上实现 PHPStan\Rules\Rule |
EditionBoundaryRule::getNodeType() | 无 | 声明该规则订阅的 AST 节点类型 | string(Use_::class) | 从不抛出 | 标准的 PHPStan Rule 契约方法 |
EditionBoundaryRule::processNode() | Node $node、Scope $scope | 将每个被导入的符号与该被分析命名空间所禁止的前缀进行比对 | list<IdentifierRuleError>(合规时为空) | 从不抛出;违规以规则错误形式浮现 | 错误标识符 nextpdf.editionBoundaryViolation |
final class EditionBoundaryRule implements Rule{ public function getNodeType(): string;
public function processNode(Node $node, Scope $scope): array;}行为契约
标题为“行为契约”的章节EditionBoundaryRule 在 Use_ 节点类型之上实现标准的 PHPStan Rule 契约。对于每条 use 语句,它会将被分析文件的命名空间与每个被导入符号的命名空间前缀进行比较,并强制执行一种单向依赖顺序。
| 被分析命名空间 | 版本标签 | 被禁止的导入前缀 |
|---|---|---|
NextPDF\* 子命名空间,不含 Pro 与 Enterprise | Core | NextPDF\Pro\、NextPDF\Enterprise\ |
NextPDF\Pro 与 NextPDF\Pro\* | Pro | NextPDF\Enterprise\ |
NextPDF\Enterprise 与 NextPDF\Enterprise\* | Enterprise | 无(最顶层级) |
NextPDF\ 之外的任意命名空间 | — | 无(不受约束) |
当一次导入跨越该边界时,该规则会以标识符 nextpdf.editionBoundaryViolation 报告一个错误,锚定到出问题的 use 语句行上。消息会指明被导入的符号、进行导入的命名空间、被禁止的前缀,以及人类可读的版本标签。每个被导入的符号至多产生一个错误:前缀匹配在第一个匹配到的被禁止前缀处停止。
该检查是静态且建议性的。它在导入语句上报告边界违规。它不证明被分析的程序在其他方面是正确的。
边界情形与失败模式
标题为“边界情形与失败模式”的章节NextPDF\之外的命名空间以及无命名空间的文件不产生任何错误;该规则返回一个空列表。- 声明在恰好为根命名空间
NextPDF(没有子命名空间段)中的代码不受约束;边界检测匹配的是NextPDF\的子命名空间。 - Enterprise 文件绝不会因导入 Pro 或 Core 符号而被标记(最顶层级,按设计如此)。
- 前缀匹配是分隔符敏感的。诸如
NextPDF\Professional这样的命名空间会归类为 Core 而非 Pro,其下的导入绝不会对NextPDF\Pro\前缀产生误报。 - 导入字面名称
NextPDF\Pro或NextPDF\Enterprise而无更进一步的段,不会被标记;只有这些前缀之下的符号才会匹配。 - 该规则不按导入种类过滤:被禁止前缀之下的 class、
function与const导入都会报告。 - 未配
use语句、以完全限定形式内联写出的引用不在范围内。请优先使用导入,以便边界得到强制执行。 - 分组
use声明会解析为独立的GroupUse节点类型,落在该规则的Use_订阅之外;逐符号的普通导入则保持边界受检。 processNode()从不抛出;所有结果都以 PHPStan 规则错误或一个空结果浮现。- 它不是一个运行时组件。它不执行任何密码学操作,且 FIPS 模式不适用。
符合性
标题为“符合性”的章节不作出任何标准符合性主张。这是一个开发者工具规则,用于在下游构建中强制执行一项内部架构约束(版本分层)。它实现的是 PHPStan 规则扩展契约,这是一个第三方工具 API,而非正式标准。该规则不对被分析代码作出任何合规、认证或正确性保证;它仅报告版本边界导入违规,且是建议性的。
开发说明
标题为“开发说明”的章节- 该规则在分析期间于 PHPStan 内部执行,仅读取源结构,且对生成的 PDF 或任何已部署的服务没有任何影响。
- 注册该规则并选择 PHPStan 级别仍是集成方的责任。
- 该类是
final且无状态的,因此在 PHPStan 的并行分析工作进程下是安全的。 - 对于给定的源码树,分析输出是确定性的:相同的输入产生相同的错误列表。
- 自
nextpdf/enterprise2.1.0 起可用;上述契约反映的是 3.1.0。
发布边界
标题为“发布边界”的章节本页仅描述外部可观察的行为以及受支持的公共 API 接口面。内部命名空间路径、辅助类、机制表、runbook 文件名以及工单前缀均不在范围内。