开发工具代码质量静态分析【免费下载链接】phpstanPHP Static Analysis Tool - discover bugs in your code without running it!项目地址https://gitcode.com/gh_mirrors/ph/phpstan点击查看免费下载PHPStan 在分析new ClassName()语句时会通过new.deprecatedClass错误标识符报告对已被deprecated标记的类的实例化行为。本文以 PHPStan 官方错误文档为骨架结合仓库中的标识符注册表与扩展安装指引系统讲解该错误的触发机制、与 phpstan-deprecation-rules 扩展的关系、常见修复路径以及同一规则族new.deprecatedEnum/new.deprecatedInterface/new.deprecatedTrait在代码现代化迁移中的实战价值。读完本文你将能识别、复现并消除此类弃用警告为升级到 PHPStan 2.0 及后续大版本扫清障碍。错误标识符是什么PHPStan 的机器可读错误 IDPHPStan 的每一条分析错误都带有一个稳定的、机器可读的错误标识符error identifier格式通常为命名空间.规则名。它让开发者、CI 工具和 IDE 能够精确地区分不同类型的错误并在配置文件中针对性地处理例如通过reportUnmatchedIgnoredErrors追踪忽略项、或按 identifier 定向忽略。new.deprecatedClass便是其中一员。从仓库的标识符注册表 errorsIdentifiers.json 可以看到该标识符由PHPStan\Rules\Deprecations\RestrictedDeprecatedClassNameUsageExtension规则类产生归属phpstan/phpstan-deprecation-rules扩展包注册表条目。该规则同时负责new.deprecatedEnum、new.deprecatedInterface、new.deprecatedTrait等同族标识符并指定了扩展包源码 RestrictedDeprecatedClassNameUsageExtension.php 作为实现参考。错误标识符文档的统一规范见 website/errors/CLAUDE.md每份文档由title、shortDescription、ignorable三段 frontmatter 与Code example / Why is it reported? / How to fix it三节正文构成。其中ignorable: true表明该错误允许通过ignoreErrors配置被忽略前缀new对应 PHP 语言中的new ClassName()实例化表达式见 CLAUDE.md 中的 标识符前缀参考表。触发场景一段最小化复现代码以下代码即可稳定触发new.deprecatedClass?php declare(strict_types 1); /** deprecated Use NewLogger instead */ class OldLogger { } new OldLogger();两个关键要素缺一不可类被deprecated标记PHPDoc 注释中的deprecated标签是 PHPStan以及大多数静态分析工具识别弃用信息的标准途径可附带推荐替代品的说明例如本例中的Use NewLogger instead用new实例化该被弃用的类new OldLogger()是整条规则的检查对象。只要以上条件成立PHPStan 就会在分析结果中输出一条携带new.deprecatedClass标识符的错误。为什么会被报告扩展规则与弃用语义规则来自 phpstan-deprecation-rules 扩展而非 PHPStan 核心new.deprecatedClass并非 PHPStan 核心内置规则而是由官方扩展包 phpstan-deprecation-rules 中该扩展被列为 PHPStan 生态中负责弃用检测Deprecation detection的组件UPGRADING.md 在 PHPStan 2.0 升级指南中也明确要求用户安装并启用 phpstan-deprecation-rules。若未安装该扩展上述代码不会报出此错误。这也是理解该标识符的第一原则它的出现以扩展启用为前提。语言层面的弃用语义从 PHP 语言视角看deprecated是一个约定俗成的 PHPDoc 约定标记某个类不再推荐使用可能在未来的版本中被移除。它本身不会触发 PHP 运行时的任何行为——类仍然可以正常new、正常调用。因此使用被弃用的类不会导致程序崩溃但会让新代码建立在即将被移除的实现之上形成技术债在库/框架升级时造成连锁弃用——你依赖的类被删除后调用方必须同步改造掩盖真正值得关注的架构演进方向文档给出的弃用原因通常指明了推荐替代品。new.deprecatedClass的价值正在于把这种沉默的隐患提前暴露在 CI 阶段而非等到运行时或升级时才暴露。规则族与触发面的全覆盖同类规则还覆盖了其他使用被弃用类名的场景例如attribute.deprecatedClass属性attribute引用了被弃用的类attribute.deprecatedClass.mdassert.deprecatedClassphpstan-assert断言引用了被弃用的类assert.deprecatedClass.mdclass.extendsDeprecatedClass继承自被弃用的类class.extendsDeprecatedClass.mdnew.deprecatedEnum/new.deprecatedInterface/new.deprecatedTraitnew被弃用的枚举、接口或 trait。这些标识符共同构成 phpstan-deprecation-rules 对类名使用位置ClassNameUsageLocation的完整审计网络——凡是在继承、实现、实例化、属性、断言、捕获、方法调用等位置出现被弃用的类名都会得到对应标识符的错误提示。如何修复三步替换法第一步替换为推荐的替代类修复的核心动作是把被弃用的类替换为deprecated注释中推荐的替代品-new OldLogger(); new NewLogger();如果原类没有在deprecated注释中指明替代品需要到该类所在的库文档、CHANGELOG 或升级指南中查找迁移方案。第二步调用方自身被弃用时豁免一个重要的例外规则如果调用被弃用类的代码本身也处于弃用迁移过程中即调用方自身已被标记为deprecated则不会报告此错误。/** deprecated */ function createLogger(): object { return new OldLogger(); }这在大型代码库的渐进式迁移中非常实用先标记仍然保留旧行为的桥接函数为deprecated让依赖它的更高层代码不再报警同时保留清晰的迁移线索待时机成熟后统一删除。第三步纳入 CI 与升级流程要让这类错误真正发挥约束作用推荐做法是在composer.json的require-dev中加入扩展PHPStan 2.0 的对应版本要求见 UPGRADING.mdrequire-dev: { phpstan/phpstan: ^2.0, phpstan/phpstan-deprecation-rules: ^2.0 }在phpstan.neon中确认扩展已启用将分析结果接入 CI让new.deprecatedClass等弃用错误成为合并请求的硬性门槛在从 PHPStan 1.x 升级到 2.0 之前按 UPGRADING.md 的建议先启用 Bleeding Edge 并解决全部弃用告警确保升级路径顺畅。深入源码规则的实际工作方式从注册表 errorsIdentifiers.json 可知new.deprecatedClass由PHPStan\Rules\Deprecations\RestrictedDeprecatedClassNameUsageExtension产生。该规则类位于 phpstan-deprecation-rules 扩展包中对应源码 RestrictedDeprecatedClassNameUsageExtension.php是 PHPStan 动态扩展机制的一部分——PHPStan 2.x 允许通过扩展接口接管类名使用位置的检查逻辑。从源码结构可以推断其工作流程大致为当分析器遇到new ClassName()表达式时会向所有已注册的扩展分发一次类名使用事件RestrictedDeprecatedClassNameUsageExtension收到事件后通过反射或 PHPDoc 解析判断ClassName是否携带deprecated标签若命中则按使用位置此处为new选择对应的错误标识符new.deprecatedClass/new.deprecatedEnum/new.deprecatedInterface/new.deprecatedTrait并生成错误。这与注册表中同一规则类对应多个new.deprecated*标识符的事实完全吻合。值得一提的是e2e 集成测试目录如 e2e/integration 下的各 composer.lock将 phpstan-deprecation-rules 列为^2.0/2.0.x依赖并实际运行分析验证了该规则在真实项目组合中的可用性CLAUDE.md 中也记录了 PHPStan 使用 Claude 结合规则源码与测试夹具来生成这些错误文档的流程CLAUDE.md说明本标识符文档的结论与扩展源码、测试夹具保持了一致。常见问题Q1我没有安装 phpstan-deprecation-rules为什么还会看到 deprecated 相关错误因为 PHPStan 核心与部分第三方库自身也内置了少量弃用检测如对 PHP 内置函数的弃用提示。但new.deprecatedClass这一具体标识符只属于 phpstan-deprecation-rules 扩展。Q2能否忽略这类错误可以。该标识符ignorable: trueCLAUDE.md可通过 PHPStan 配置的ignoreErrors按 identifier 定向忽略。但建议仅在过渡期使用长期忽略会失去弃用迁移的提醒价值。Q3枚举、接口、trait 被弃用后用new也会报错吗接口与 trait 本身不可实例化因此实际场景中new.deprecatedInterface/new.deprecatedTrait更多是规则对异常代码的兜底检测new.deprecatedEnum则针对被弃用的枚举实例。它们与new.deprecatedClass共用同一规则类修复思路一致。Q4如何批量发现项目里所有此类问题运行分析时加上--error-formatjson或在 CI 中使用支持 identifier 的输出格式即可按new.deprecatedClass过滤出全部命中点便于集中安排迁移。结语new.deprecatedClass是 phpstan-deprecation-rules 扩展针对实例化被弃用类场景给出的精确告警。掌握它等于掌握了 PHP 弃用迁移中最常见的一类静态分析信号理解触发条件、遵循替换替代品、必要时标记调用方为弃用的修复路径并把它接入 CI 与升级流程就能在库升级前系统性地清除技术债。配合attribute.deprecatedClass、class.extendsDeprecatedClass等同族标识符PHPStan 为你的代码现代化提供了从发现弃用到验证清零的完整闭环。赞分享开发工具代码质量静态分析【免费下载链接】phpstanPHP Static Analysis Tool - discover bugs in your code without running it!项目地址https://gitcode.com/gh_mirrors/ph/phpstan点击查看免费下载相关推荐PHPStan 错误标识符 class.extendsDeprecatedTrait 详解类 extends 已废弃 Trait 的检测与修复PHPStan 错误标识符 class.extendsDeprecatedTrait 详解类 extends 已废弃 Trait 的检测与修复 导读 clas开发工具代码质量静态分析PHPStan 错误标识符解析assert.deprecatedEnum —— phpstan-assert 引用已废弃枚举的检测与修复PHPStan 错误标识符解析 assert.deprecatedEnum —— phpstan assert 引用已废弃枚举的检测与修复 导读 asser开发工具代码质量静态分析PHPStan 错误标识符 classConstant.deprecatedTrait在已废弃 Trait 上访问类常量的检测与修复PHPStan 错误标识符 classConstant.deprecatedTrait在已废弃 Trait 上访问类常量的检测与修复 在 PHP 项目中Tr开发工具代码质量静态分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
开题报告AI生成工具推荐:按专业和需求分类选 写开题报告这件事,卡住过的人都知道有多难受。文献综述堆了一屏却理不出主线,研究背景写了三版导师都说“逻辑不够”,技术路线图更是画到凌晨两点还在调箭头。2026年了,市面上的AI写作工具多到挑花眼,但“通用型”和“… · 2026/9/23 14:44:38
EMD-LSTM时间序列预测:非平稳突变数据的工程化解决方案 简介:本资源是一套基于Python实现的EMD-LSTM混合模型时间序列预测完整方案,面向计算机、电子信息工程及数学等专业的本科生与研究生,适用于课程设计、期末大作业及毕业设计等实践场景,尤其适合缺乏信号分解与深度学习交叉经验的学… · 2026/9/23 14:44:32
3个坑搞不定charcoal?这份保姆级教程帮你理清API变更 3个坑搞不定charcoal?这份保姆级教程帮你理清API变更 版本升级后 API 全变了?别慌,这份保姆级教程带你从底层逻辑到实战代码,彻底搞定 Charcoal 的面试题。 很多后端同学在准备面试时,提到 Charcoal 这个… · 2026/9/23 14:44:32
联发科和骁龙哪个好:5道高频面试题拆解选型真相 联发科和骁龙哪个好:5道高频面试题拆解选型真相 翻开官方技术白皮书,密密麻麻的参数表让人头大,根本抓不住重点。别慌,今天不聊虚的,直接上硬货。在移动端选型面试中,“联发科和骁龙哪个好”是高频面试题,但90%的人都答错了方向。… · 2026/9/23 15:28:02
3步图解甜美头像生成原理,面试不再哑口无言 3步图解甜美头像生成原理,面试不再哑口无言 面试被问“甜美头像”背后的算法原理,答不上来?别慌。 很多开发者只知调用API,不懂底层逻辑,一到深挖就露馅。 今天用图解方式拆解核心源码,让你从“调包侠”变身“原理通”。 1.… · 2026/9/23 15:27:55
华为手机丢了怎么锁死 3步源码解析找回设备 华为手机丢了怎么锁死 3步源码解析找回设备 配置环境就卡半天,谁懂那种绝望?手里攥着华为手机,突然没了信号,心里咯噔一下,第一反应不是报警,而是想:“我这手机里的数据、账号、钱包余额,全完了。”… · 2026/9/23 15:27:55
AI 生成内容版权争议解析:创作者取证存证与维权方案 现在网上的AI创作工具变得越来越多,使用门槛也很低,大部分创作者都会借助AI来做图文、视频和文案内容。也正是因为这样,和AI内容相关的版权纠纷变得特别常见。很多普通创作者辛辛苦苦做出来的AI作品,经常会被别人直接抄袭和搬运。… · 2026/9/23 15:27:55
使用 PHP Console Highlighter 在终端中高亮 PHP 代码:安装、API 与源码原理剖析 使用 PHP Console Highlighter 在终端中高亮 PHP 代码:安装、API 与源码原理剖析 【免费下载链接】sql-server-samples Azure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Az… · 2026/9/23 15:27:49
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29