开发工具代码质量静态分析【免费下载链接】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),仅供参考
企业数字化 ERP 产品动态
相关推荐
用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:01
Java进阶篇之Phaser:让参与者灵活加入与退出阶段协作 上一篇的CyclicBarrier适合同一组工作者反复会合。再往前走一步:如果准备阶段需要三位工作者,后续加工只需要其中两位,怎样让队伍在阶段之间自然调整?今天认识Phaser,把注册、到达和退出放进一个完整例子里。… · 2026/9/24 15:47:55
基于SpringBoot的宠物救助及领养平台的设计与实现-附源码 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台… · 2026/9/24 18:13:46
Unity 2D格斗游戏动画系统实战:从.anim文件到可维护状态机 简介:本资源是一套基于Unity引擎开发2D街机游戏《三国战纪》的完整教学实践项目,面向Unity初学者及有一定C#基础的游戏开发学习者,聚焦2D动作游戏核心机制实现与工程化落地。资源包含443个文件,以90个C#脚本(涵盖角色控… · 2026/9/24 18:13:46
C++数据结构继承的概念与菱形继承及虚拟继承和组合 继承:继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到… · 2026/9/24 18:13:46
YOLOv8农田虫情测报灯害虫识别系统:从数据训练到界面部署 简介:基于YOLOv8的农田智能虫情测报灯害虫种类识别系统,是一套面向计算机视觉与深度学习方向毕业设计或课程设计的完整项目,以农田害虫识别为场景,包含训练好的模型权重、可视化界面、完整数据集和部署教程,代码测试运… · 2026/9/24 18:13:39
LSTM财务因子选股:从数据清洗到回测的完整指南 简介:这是一份面向毕业设计场景的LSTM财务因子预测选股模型Python源码,适合金融科技、人工智能及相关专业学生用于课程设计或毕业设计。项目基于历史财务因子与行情数据,通过LSTM神经网络构建预测模型,并附带MindGo平台接口脚本、… · 2026/9/24 18:13:39
基于Servlet+JSP+MySQL的学生成绩管理系统:从架构到避坑全解析 简介:这是一套基于ServletJspMySQL实现的学生成绩管理系统项目,完整附带源码与数据库脚本,面向计算机相关专业正在做毕业设计的学生,也适合需要Java Web项目实战训练的初中级学习者,可协助解决项目代码、数据库设计及部… · 2026/9/24 18:13:39
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44