PHPStan 错误标识符 sealed.deprecatedClass 完全指南:@phpstan-sealed 引用废弃类时的检测与修复
开发工具代码质量静态分析【免费下载链接】phpstanPHP Static Analysis Tool - discover bugs in your code without running it!项目地址https://gitcode.com/gh_mirrors/ph/phpstan点击查看免费下载PHPStan 的sealed.deprecatedClass是phpstan/phpstan-deprecation-rules扩展提供的错误标识符error identifier用于在phpstan-sealed密封类型标签引用了被deprecated标记的类时发出告警。本文以 PHPStan 官方错误文档库website/errors/sealed.deprecatedClass.md为骨架结合仓库内的同族标识符文档与密封类语法说明系统讲解该错误的触发场景、底层原理、修复方案及同族错误对照帮助你在使用 PHPStan 密封类型sealed classes特性时避免对即将移除的废弃符号形成隐性依赖。一、错误概览一句话理解 sealed.deprecatedClass属性说明错误标识符sealed.deprecatedClass短描述phpstan-sealed标签引用了被标记为deprecated的类所属扩展phpstan/phpstan-deprecation-rules是否可忽略是ignorable: true可在基线或忽略规则中处理对应语法特性phpstan-sealedPHPDoc 密封类型标签按 PHPStan 错误文档的前缀约定见 website/errors/CLAUDE.mdsealed前缀专门对应phpstan-sealedPHPDoc 标签与attribute、mixin、requireExtends等前缀一样属于基于ClassNameUsageLocation的规则分类。二、完整触发示例以下代码会触发sealed.deprecatedClass错误示例取自官方文档?php declare(strict_types 1); namespace App; /** deprecated Use NewHandler instead */ class OldHandler { } /** * phpstan-sealed OldHandler */ interface HandlerProvider { }触发条件可拆解为三点存在一个类OldHandler其 PHPDoc 中带有deprecated标记存在一个密封声明此处为接口HandlerProvider其phpstan-sealed标签中列出了该废弃类该密封声明本身没有被标记为deprecated若声明自身已废弃则不会报错详见下文第六节。三、为什么会被报告原理剖析官方文档给出了明确的原因说明phpstan-sealed标签用于限制哪些类型允许实现或继承被密封的类型。当该标签引用了一个被标记为deprecated的类时实际上是在密封约束中建立了一个对即将被移除符号的依赖。3.1 密封类型机制回顾密封类型sealed classes是 PHPStan 2.1.18 起提供的能力见 website/src/writing-php-code/phpdocs-basics.md在类或接口上使用phpstan-sealed即可将允许扩展/实现它的类型限制为标签中列出的白名单/** phpstan-sealed FooClass|BarClass */ class BaseClass {} class FooClass extends BaseClass {} class BarClass extends BaseClass {} class BazClass extends BaseClass {} // Error: Type BazClass is not allowed to be a subtype of BaseClass.phpstan-sealed标签接受一个或多个类/接口名用|分隔被密封的类型在定义可扩展子类型集合的同时也承担了唯一合法依赖者的角色。3.2 密封约束与废弃符号的冲突当白名单中的符号已被deprecated标记时就产生了语义冲突废弃标记的语义deprecated表示该符号已计划在未来的版本中被移除新代码不应再依赖它密封标签的语义phpstan-sealed OldHandler意味着本类型的合法子类型中必须包含 OldHandler这等于把废弃类重新钉死在类型层级中两者的矛盾密封约束本质上是在声明这个废弃类依然是我们类型体系的一部分与移除计划背道而驰会阻碍后续的符号清理工作。因此phpstan-deprecation-rules 扩展将这种引用视为需要修复的废弃用法并报告错误。四、如何修复标准修复方案官方文档给出的首选修复方式是将phpstan-sealed标签中的废弃类替换为其推荐的替代类。?php declare(strict_types 1); namespace App; /** - * phpstan-sealed OldHandler * phpstan-sealed NewHandler */ interface HandlerProvider { }如果OldHandler的deprecated注释中已标明推荐替代如示例中的Use NewHandler instead直接按提示替换即可。替换后密封约束不再引用废弃符号类型层级对NewHandler开放依赖方向与新代码保持一致。五、同族错误对照sealed.* 系列标识符sealed.deprecatedClass并非孤立存在PHPStan 错误文档库中还有一组同族标识符覆盖了phpstan-sealed引用各类废弃/受限符号的场景标识符触发场景对应文档sealed.deprecatedClass引用废弃类sealed.deprecatedClass.mdsealed.deprecatedEnum引用废弃枚举sealed.deprecatedEnum.mdsealed.deprecatedInterface引用废弃接口sealed.deprecatedInterface.mdsealed.deprecatedTrait引用废弃 traitsealed.deprecatedTrait.mdsealed.internalClass/sealed.internalEnum/sealed.internalInterface/sealed.internalTrait引用internal符号sealed.internalClass.md 等sealed.nonObject标签中包含int、string、array等非对象类型sealed.nonObject.mdsealed.onTrait/sealed.onEnum在 trait 或 enum 上使用密封标签sealed.onTrait.md 等5.1 废弃枚举、接口与 trait 的同类问题与类的场景完全对称phpstan-deprecation-rules 同样会报告phpstan-sealed引用废弃枚举、接口或 trait 的情况。以废弃枚举为例见 sealed.deprecatedEnum.md?php declare(strict_types 1); namespace App; /** deprecated Use NewStatus instead */ enum OldStatus { case Active; case Inactive; } /** * phpstan-sealed OldStatus */ interface StatusProvider { }修复方式与类一致替换标签中的枚举即可/** - * phpstan-sealed OldStatus * phpstan-sealed NewStatus */ interface StatusProvider { }废弃 trait 的变体则允许直接用在类的密封标签中见 sealed.deprecatedTrait.md修复方式同样是替换为未废弃的替代/** - * phpstan-sealed DeprecatedTrait * phpstan-sealed NewTrait */ class Foo { }5.2 非对象类型的非法用法作为对照sealed.nonObject见 sealed.nonObject.md提示了密封标签的另一个约束由于只有对象才能被继承或实现phpstan-sealed中只能出现类/接口名int、string、array等标量类型均非法/** * phpstan-sealed int */ class Foo { }正确写法应使用类/接口名多个类型用|分隔?php declare(strict_types 1); /** * phpstan-sealed ChildA|ChildB */ class Foo { }六、重要边界什么情况下不会报错官方文档明确了一个关键豁免规则如果包含phpstan-sealed标签的声明本身也被标记为deprecated则不会报告该错误。?php declare(strict_types 1); namespace App; /** deprecated Use NewHandler instead */ class OldHandler { } /** * deprecated Use NewProvider instead * phpstan-sealed OldHandler */ interface HandlerProvider { }这里的逻辑是当整个声明都已废弃时其内部的密封约束只是废弃代码的一部分引用废弃类不再产生额外的新增依赖因此 phpstan-deprecation-rules 选择保持沉默避免在已经废弃的代码上叠加噪音告警。这体现了废弃规则设计中的级联废弃思想——废弃的容器不再单独追究其内部内容。七、实践中如何排查与处理7.1 定位错误运行 PHPStan 分析时错误信息中会携带标识符sealed.deprecatedClassvendor/bin/phpstan analyse --error-formattable在输出中找到形如下方的行------ ------------------------------------------------------------------ Line HandlerProvider ------ ------------------------------------------------------------------ 21 Tag phpstan-sealed references a deprecated class OldHandler. You can ignore this error by ... (sealed.deprecatedClass) ------ ------------------------------------------------------------------7.2 处理优先级按照 PHPStan 错误文档的修复优先级约定见 website/errors/CLAUDE.md建议按以下顺序处理修复实质问题替换phpstan-sealed中的废弃类为其替代类如第四节所示若声明整体已废弃给声明本身加上deprecated错误自然消失见第六节临时忽略该标识符ignorable: true可作为最后手段加入忽略规则或基线parameters: ignoreErrors: - identifier: sealed.deprecatedClass path: src/Legacy/*八、总结sealed.deprecatedClass是 PHPStan 密封类型特性phpstan-sealed自 PHPStan 2.1.18 起与废弃检测规则phpstan-deprecation-rules交汇处的产物。它确保开发者不会在密封类型白名单中引入已被标记移除的废弃类从而保持类型层级与代码演进方向一致。掌握它的触发条件、同族标识符废弃枚举/接口/trait、非对象类型以及声明自身废弃即豁免的边界规则就能在使用密封类型时写出既严谨又整洁的 PHPDoc 约束。赞分享开发工具代码质量静态分析【免费下载链接】phpstanPHP Static Analysis Tool - discover bugs in your code without running it!项目地址https://gitcode.com/gh_mirrors/ph/phpstan点击查看免费下载相关推荐PHPStan 错误标识符 sealed.deprecatedInterface 详解phpstan-sealed 引用已废弃接口的检测与修复PHPStan 错误标识符 sealed.deprecatedInterface 详解phpstan sealed 引用已废弃接口的检测与修复 sealed开发工具代码质量静态分析PHPStan 错误标识符 assert.deprecatedTrait 完全指南phpstan-assert 断言引用已废弃 Trait 的检测与修复PHPStan 错误标识符 assert.deprecatedTrait 完全指南 phpstan assert 断言引用已废弃 Trait 的检测与修复开发工具代码质量静态分析PHPStan 错误标识符 sealed.deprecatedEnum 详解phpstan-sealed 标签引用已弃用枚举的检测与修复PHPStan 错误标识符 sealed.deprecatedEnum 详解 phpstan sealed 标签引用已弃用枚举的检测与修复 导读 seale开发工具代码质量静态分析上一篇Understat用Python轻松获取专业足球数据分析的终极指南 下一篇终极指南5步在Windows上安装安卓APK文件告别笨重模拟器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

用Gamma十分钟生成高质感AI PPT:从提示词到排版的设计逻辑

用Gamma十分钟生成高质感AI PPT:从提示词到排版的设计逻辑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 15:48:03 阅读更多 →
Codex 下载 本地部署

Codex 下载 本地部署

OpenAI Codex是专为代码场景优化的大语言模型,依托GPT架构迭代优化,精通多编程语言代码生成、语法纠错、逻辑重构、注释补全与bug修复,是智能编程、自动化脚本开发、嵌入式程序调试的核心工具。相较于云端Codex接口,本地部署可彻底…

2026/9/24 15:48:03 阅读更多 →
YOLO11模型导出全攻略:PyTorch、ONNX与TensorRT三种格式从原理到实战部署的完整指南

YOLO11模型导出全攻略:PyTorch、ONNX与TensorRT三种格式从原理到实战部署的完整指南

🎬 Clf丶忆笙:个人主页 🔥 个人专栏:《YOLOv11全栈指南:从零基础到工业实战》 ⛺️ 努力不一定成功,但不努力一定不成功! 文章目录 一、YOLO11模型导出基础 1.1 模型导出的意义与价值 1.2 YOLO11模型导出流程概览 1.3 环境准备与依赖安装 二、PyTorch格式导出详解 …

2026/9/24 15:48:03 阅读更多 →

最新新闻

Python+OpenCV答题卡识别实战:透视校正与填涂判定

Python+OpenCV答题卡识别实战:透视校正与填涂判定

简介:这是一套面向计算机相关专业毕业设计场景的智能答题卡识别系统完整资料,基于Python与OpenCV实现,适合正在准备毕设或需要图像识别项目实战练习的学习者。项目经导师指导并通过评审,源码均经本地编译调试,可正常运…

2026/9/24 19:29:01 阅读更多 →
IDEA关闭标签页快捷键修改指南:彻底搞定Keymap自定义

IDEA关闭标签页快捷键修改指南:彻底搞定Keymap自定义

上周有个从 VSCode 跳槽过来的同事在工位喊了一嗓子:"IDEA 里关闭当前标签页怎么是 CtrlF4?这也太反人类了吧,我快被这个快捷键搞疯了。"我当时正准备回话,旁边另一个做 Java 开发很久的同事也凑过来:"…

2026/9/24 19:29:00 阅读更多 →
19种器官细胞图像识别:PyTorch医学图像分类实战指南

19种器官细胞图像识别:PyTorch医学图像分类实战指南

简介:面向医学图像分类任务的中型数据集,整合19类器官细胞图像,覆盖肾上腺、子宫、甲状腺、食道等类别,训练集2100张、测试集500张,已按文件夹划分,可直接用于CNN分类网络或基于yolov5的分类项目。包体共20…

2026/9/24 19:29:00 阅读更多 →
键盘检测工具怎么用?一篇讲清按键失灵排查与实测方法

键盘检测工具怎么用?一篇讲清按键失灵排查与实测方法

键盘检测工具这类软件,很多人只在键盘到手时打开一次,随手按两下就关了。我以前也这样,直到被一把“偶发失灵”的键盘折磨了半个月,才真正意识到一个不到1MB的小工具在排查故障时有多能打。这篇文章就把我实际测试的过程、踩过的坑…

2026/9/24 19:29:00 阅读更多 →
2026年自助建站系统怎么选?主流方案对比与实操避坑指南

2026年自助建站系统怎么选?主流方案对比与实操避坑指南

做网站这件事,这些年被自助建站系统彻底改造成了“流水线作业”。哪怕你完全不懂代码,只要会打字、会传图片,几个小时就能拼出一个像模像样的站点。到了2026年,这个赛道的产品已经不是简单拼模板、拼功能了,而是在拼AI…

2026/9/24 19:29:00 阅读更多 →
K8s混部技术实战:从原理到落地,提升集群资源利用率

K8s混部技术实战:从原理到落地,提升集群资源利用率

干了这么多年K8s集群运维,我见过太多资源利用率表上写着CPU平均使用率不到20%的集群了。今天想认真聊聊混部技术——就是把在线业务和离线任务塞到同一批物理节点上,用资源调度优化手段把整体资源利用率拉上去的做法。这篇文章会从原理讲到实操&#xff…

2026/9/24 19:28:00 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →