
开发工具代码质量静态分析【免费下载链接】phpstanPHP Static Analysis Tool - discover bugs in your code without running it!项目地址https://gitcode.com/gh_mirrors/ph/phpstan点击查看免费下载导读class.extendsDeprecatedTrait是 PHPStan 在启用 phpstan-deprecation-rules 扩展后新增的错误标识符用于检测一个类试图通过extends继承一个已被deprecated标记的 Trait这一代码模式。本文将以 PHPStan 仓库中该标识符的官方文档为骨架结合标识符注册表与配套错误文档说明它的触发条件、与 PHP 语言规则的冲突点、正确修复方式以及如何在项目中安装启用相关规则。什么是 class.extendsDeprecatedTrait该错误标识符由 website/errors/class.extendsDeprecatedTrait.md 文档定义其 frontmatter 声明如下--- title: class.extendsDeprecatedTrait shortDescription: Class extends a deprecated trait. ignorable: true unlikely: true ---shortDescription类继承extends了一个已被标记废弃的 Traitignorable: true该错误可以通过ignoreErrors配置被忽略unlikely: true这是一类几乎不可能在真实代码中触发的错误——原因见下文因为触发它本身就需要一段 PHP 根本不允许存在的代码。在 website/src/errorsIdentifiers.json 中class.extendsDeprecatedTrait被映射到规则类PHPStan\Rules\Deprecations\RestrictedDeprecatedClassNameUsageExtension来源包为phpstan/phpstan-deprecation-rules。也就是说它并不是 PHPStan 核心分析器直接报出的错误而是由独立的废弃检测扩展提供。触发该错误的代码示例文档给出的最小触发示例class.extendsDeprecatedTrait.md?php declare(strict_types 1); /** deprecated Use NewHelper instead */ trait OldTrait { } class Foo extends OldTrait { }触发条件有两个层面OldTrait通过 PHPDoc 标签deprecated被标记为废弃且注释中给出了推荐替代方案Use NewHelper instead类Foo在extends子句中使用引用了这个废弃 Trait。为什么会报告这个错误PHP 语言语义层面Trait 本就不允许被 extends从 PHP 语言设计角度看Trait 是一种水平代码复用机制应当通过类体内的use关键字引入而不是通过继承体系的extends。试图extends一个 Trait 会在运行时直接触发致命错误fatal error因此任何出现在extends位置的 Trait 引用本质上都是开发者的笔误或重构残留。废弃检测层面废弃符号不应再被使用deprecated标记意味着该 Trait 计划在未来版本中被移除。即使最终代码能运行显然这里不能继续引用一个废弃的 Trait 也会把后续维护者绑死在即将删除的实现上。废弃规则Deprecations 规则族的目的就是在编译期静态地捕捉这类不该再出现的引用让你不用运行代码就能发现问题——这正是 PHPStan 这类静态分析工具的核心价值。特别说明与 class.extendsTrait 的伴生关系文档特别强调了一个值得注意的细节class.extendsDeprecatedTrait.md触发该标识符要求类去extends一个 Trait而这在 PHP 中是明令禁止的。因此 PHPStan 在报告class.extendsDeprecatedTrait的同时总是还会报告一个不可忽略non-ignorable的class.extendsTrait错误。class.extendsTrait属于 PHPStan 核心规则website/src/errorsIdentifiers.json由PHPStan\Rules\Classes\ExistingClassInClassExtendsRule报告其ignorable为false对应的官方文档见 website/errors/class.extendsTrait.md。它的存在说明无论废弃与否extends Trait本身就是语法级错误无法被忽略配置掩盖。因此在实际项目中你看到的往往是一对错误——一个不可忽略的语言错误class.extendsTrait加一个可忽略的废弃引用错误class.extendsDeprecatedTrait。如何修复修复思路很明确废弃的 Trait 绝对不应该出现在extends位置。有两种正确做法class.extendsDeprecatedTrait.md方案一改用use引入 Trait若 Trait 的内容确实需要-class Foo extends OldTrait class Foo { use NewHelper; }注意如果只是把OldTrait换成use OldTrait虽然修正了语法错误但OldTrait仍是废弃的废弃规则依然会报出traitUse.deprecatedTrait之类的错误。因此替换时应一并换成文档注释中推荐的替代品示例中的NewHelper而不是原封不动地use废弃 Trait。方案二extends 一个真正的类若语义上需要继承如果本意是继承某个基类则应将extends目标换成正确的类例如-class Foo extends OldTrait class Foo extends NewBaseClass { }这种场景与class.extendsDeprecatedClass的修复方式一致可参考 website/errors/class.extendsDeprecatedClass.md。同一个错误标识符家族class.extends*是一整组以类继承关系为检测点、前缀格式特殊的标识符族见 website/errors/CLAUDE.md 中的 prefix reference。与本文主题直接相关的包括标识符含义文档class.extendsDeprecatedTrait类 extends 废弃 Traitclass.extendsDeprecatedTrait.mdclass.extendsTrait类 extends Trait语言级错误不可忽略class.extendsTrait.mdclass.extendsDeprecatedClass类 extends 废弃类class.extendsDeprecatedClass.mdclass.extendsDeprecatedInterface类 extends 废弃接口errorsIdentifiers.jsoninterface.extendsDeprecatedTrait接口 extends 废弃 Traitinterface.extendsDeprecatedTrait.md其中interface.extendsDeprecatedTrait与本文主题高度相似只是引用位置发生在接口的extends子句中修复方式同样是删掉废弃 Trait 的引用、改 extend 合法的接口见 interface.extendsDeprecatedTrait.md。这些废弃检测错误全部由phpstan-deprecation-rules扩展提供。如何在项目中启用该规则class.extendsDeprecatedTrait默认不会出现在 PHPStan 核心分析结果中需要安装并注册废弃规则扩展通过 Composer 安装phpstan/phpstan-deprecation-rules的 2.x 版本与 PHPStan 2.x 配套仓库 UPGRADING.md 中给出的依赖写法为{ require-dev: { phpstan/phpstan-deprecation-rules: ^2.0 } }在配置中引入规则扩展安装后通过includes在phpstan.neon中加载其 neon 配置扩展包的rules.neon或类似文件废弃规则便会随分析一起生效。仓库根目录的 CLAUDE.md 也将phpstan/phpstan-deprecation-rules列为废弃检测Deprecation detection的配套扩展。启用后废弃规则族会对各类废弃符号的引用类、接口、Trait、方法、属性、常量等统一报告class.extendsDeprecatedTrait只是其中针对类继承废弃 Trait这一特定位置的标识符。如何忽略该错误由于该标识符ignorable: true在确认误报或暂缓处理时可以在phpstan.neon中按标识符精确忽略parameters: ignoreErrors: - identifier: class.extendsDeprecatedTrait需要注意的是伴随它一起出现的class.extendsTrait是不可忽略ignorable: false的语言级错误仅忽略class.extendsDeprecatedTrait并不能让整段代码通过分析——这恰恰是 PHPStan 设计上的刻意安排废弃引用可以容忍但非法的 PHP 语法不能。小结class.extendsDeprecatedTrait是 PHPStan 废弃检测规则族中一个低概率但高信息量的标识符它把引用了废弃 Trait这一静态分析层面的告警叠加在类不能 extends Trait这一 PHP 语言规则之上。理解它与class.extendsTrait的伴生关系有助于准确判断错误报告的本质——先修正语法级错误再用推荐替代品替换废弃 Trait。若要深入了解整组错误标识符的格式约定与生成规范可继续阅读 website/errors/CLAUDE.md若想查看同一规则的接口/类变体可对照 interface.extendsDeprecatedTrait.md 与 class.extendsDeprecatedClass.md。赞分享开发工具代码质量静态分析【免费下载链接】phpstanPHP Static Analysis Tool - discover bugs in your code without running it!项目地址https://gitcode.com/gh_mirrors/ph/phpstan点击查看免费下载相关推荐PHPStan 错误标识符 classConstant.deprecatedTrait在已废弃 Trait 上访问类常量的检测与修复PHPStan 错误标识符 classConstant.deprecatedTrait在已废弃 Trait 上访问类常量的检测与修复 在 PHP 项目中Tr开发工具代码质量静态分析PHPStan 错误标识符 assert.deprecatedTrait 完全指南phpstan-assert 断言引用已废弃 Trait 的检测与修复PHPStan 错误标识符 assert.deprecatedTrait 完全指南 phpstan assert 断言引用已废弃 Trait 的检测与修复开发工具代码质量静态分析如何用 asdf plugin test 验证插件并接入 GitHub Actions 持续集成如何用 asdf plugin test 验证插件并接入 GitHub Actions 持续集成 当你为 asdf 写了一个插件仓库例如 asdf tool开发工具代码质量静态分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考