ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PHPStan 错误标识符解析:requireExtends.deprecatedEnum——@phpstan-require-extends 引用已废弃枚举

PHPStan 错误标识符解析:requireExtends.deprecatedEnum——@phpstan-require-extends 引用已废弃枚举 开发工具代码质量静态分析【免费下载链接】phpstanPHP Static Analysis Tool - discover bugs in your code without running it!项目地址https://gitcode.com/gh_mirrors/ph/phpstan点击查看免费下载本文聚焦 PHPStan 错误标识符error identifierrequireExtends.deprecatedEnum当phpstan-require-extendsPHPDoc 标签引用的目标被标记为deprecated枚举enum时phpstan-deprecation-rules扩展会报告该问题。读完本文你将理解该标识符的触发条件、与requireExtends.enum的耦合关系、其几乎不会被实际报告的底层原因以及正确的修复姿势。一、前置概念phpstan-require-extends是什么phpstan-require-extends是 PHPStan 提供的 PHPDoc 标签用于在trait 或 interface上声明约束任何使用该 trait、或实现该 interface 的类必须继承extend指定的某个类。它的语义对应 PHP 中的类继承extends因此标签参数只接受类名。从当前仓库的错误标识符文档族可以看到该标签的完整校验矩阵全部位于 website/errors 目录错误标识符触发场景requireExtends.class标签被用在类上而非 trait/interfacerequireExtends.interface标签引用的是接口而非类requireExtends.trait标签引用的是 traitrequireExtends.enum标签引用的是枚举枚举无法被继承requireExtends.finalClass标签引用的是final类requireExtends.deprecatedClass标签引用的是已废弃的类requireExtends.deprecatedEnum标签引用的是已废弃的枚举其中requireExtends.deprecatedEnum的完整文档见 requireExtends.deprecatedEnum.md。二、错误标识符定义与元数据该文档的 frontmatter 定义了标识符的元信息title: requireExtends.deprecatedEnum shortDescription: phpstan-require-extends references a deprecated enum. ignorable: true unlikely: truetitle错误标识符本身即--error-formatjson等输出中identifier字段的值shortDescription一句话摘要说明phpstan-require-extends引用了一个已废弃的枚举ignorable: true该错误可被忽略例如写入 baseline 或通过ignoreErrors精确排除unlikely: true表示该标识符极不常见、几乎不会出现原因见下文第四节。在 website/src/errorsIdentifiers.json 中requireExtends.deprecatedEnum被映射到PHPStan\Rules\Deprecations\RestrictedDeprecatedClassNameUsageExtension位于phpstan/phpstan-deprecation-rules扩展包与requireExtends.deprecatedClass、requireExtends.deprecatedInterface、requireExtends.deprecatedTrait共用同一条规则实现——这印证了引用已废弃类型这一族检测由 deprecation 规则统一完成。三、触发示例代码长什么样文档给出的完整最小复现要求 PHP 8.1因为枚举自 8.1 引入?php declare(strict_types 1); // lint 8.1 /** deprecated Use NewStatus instead */ enum OldStatus { case Active; } /** * phpstan-require-extends OldStatus */ interface StatusAware { }这里OldStatus被deprecated标记为废弃而StatusAware接口的phpstan-require-extends又引用了它于是触发requireExtends.deprecatedEnum。对比同族文档 requireExtends.deprecatedClass.md语义完全平行——区别仅在于被引用目标是枚举还是类。四、为什么会被报告该错误由phpstan-deprecation-rules扩展报告phpstan-require-extends引用了已废弃的枚举。废弃的枚举计划在未来的某个版本中被移除因此在约束声明中继续引用它属于把废弃类型固化进公共契约应当避免。但文档特别强调了一个关键细节触发该标识符要求phpstan-require-extends引用一个枚举而这本身在 PHP 中就是不成立的——枚举不可被继承。因此 PHPStan总是会同时报告requireExtends.enum错误实践中requireExtends.deprecatedEnum这个废弃标识符反而不会与之一同出现。这正是 frontmatter 中unlikely: true的由来从源码结构看主规则RequireExtendsCheck 对应的PHPStan\Rules\PhpDoc\RequireExtendsDefinitionTraitRule等会先判定引用枚举不合法并报出requireExtends.enum而 deprecation 扩展的判定逻辑RestrictedDeprecatedClassNameUsageExtension依附于同一检查链路枚举引用因先被主规则拦截导致废弃枚举这一分支在正常执行路径上很难单独被观察到。关于枚举为何不能被require-extends的底层原因可参考兄弟文档 requireExtends.enum.mdphpstan-require-extends的extends指代的是类继承语义而 PHP 中只有类可以被继承枚举enum、接口interface、trait 都不行——要求实现某接口的类必须继承一个枚举在语言层面就是不可能满足的约束。五、如何修复修复方式非常直接将废弃枚举替换为真正的类引用。/** - * phpstan-require-extends OldStatus * phpstan-require-extends NewBaseClass */ interface StatusAware { }若你的本意是要求实现方具备某种状态能力而非继承关系也可以参照 requireExtends.enum.md 中的建议改用phpstan-require-implements约束必须实现某个接口或直接引入一个可继承的抽象基类作为约束目标/** phpstan-require-implements StatusAwareInterface */ trait CardTrait { }六、相关标识符与排查建议当你在项目中看到与require-extends相关的报错时建议按以下顺序核对能快速定位真正的问题分支先看是否同时出现requireExtends.enum——如果是说明约束目标根本不是合法类先修正目标类型改用类、接口或phpstan-require-implements若目标是类但不可继承检查是否触发了requireExtends.finalClass若目标本身是合法的可继承类再判断它是否被标记废弃从而落入requireExtends.deprecatedClass分支枚举分支requireExtends.deprecatedEnum更多是文档意义上的理论存在实际排查中以requireExtends.enum为准。相关文档均可直接查阅仓库 website/errors 目录requireExtends.enum.md、requireExtends.finalClass.md、requireExtends.deprecatedClass.md、requireExtends.interface.md、requireExtends.class.md它们共同构成phpstan-require-extends标签的完整错误语义地图。由于该标识符ignorable: true在确有历史包袱需要过渡时也可通过 PHPStan 的 baseline 机制将其纳入忽略清单但更推荐的做法始终是修正约束声明本身。赞分享开发工具代码质量静态分析【免费下载链接】phpstanPHP Static Analysis Tool - discover bugs in your code without running it!项目地址https://gitcode.com/gh_mirrors/ph/phpstan点击查看免费下载相关推荐PHPStan 错误标识符详解methodTag.deprecatedEnummethod 标签引用已废弃枚举PHPStan 错误标识符详解methodTag.deprecatedEnummethod 标签引用已废弃枚举 methodTag.deprecated开发工具代码质量静态分析PHPStan 错误标识符解析assert.deprecatedEnum —— phpstan-assert 引用已废弃枚举的检测与修复PHPStan 错误标识符解析 assert.deprecatedEnum —— phpstan assert 引用已废弃枚举的检测与修复 导读 asser开发工具代码质量静态分析PHPStan 错误标识符解析enum.implementsDeprecatedClass——枚举实现了已弃用类PHPStan 错误标识符解析enum.implementsDeprecatedClass——枚举实现了已弃用类 导读 enum.implementsDepr开发工具代码质量静态分析上一篇三步告别手写烦恼用text-to-handwriting轻松生成逼真手写作业下一篇专业级macOS菜单栏整理快速上手指南与实战技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表