十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

PHPStan function.duplicate 错误详解:同名函数重复声明检测与修复

PHPStan function.duplicate 错误详解:同名函数重复声明检测与修复 开发工具代码质量静态分析【免费下载链接】phpstanPHP Static Analysis Tool - discover bugs in your code without running it!项目地址https://gitcode.com/gh_mirrors/ph/phpstan点击查看免费下载function.duplicate是 PHPStan 静态分析工具在分析过程中发现同一函数名在多个文件中被重复声明时报告的错误标识符identifier。本文基于 website/errors/function.duplicate.md 展开讲解该错误的触发场景、底层规则实现DuplicateFunctionDeclarationRule、PHP 语言层面的成因以及两种标准的修复方式帮助你在实际项目中快速定位并消除这类重复声明问题。错误概览项目内容错误标识符function.duplicate短描述Function is declared multiple times.函数被多次声明是否可忽略是frontmatter 中ignorable: true从文档生成机制看本文件属于 website/errors 目录下按错误标识符组织的文档体系。该目录中的每份文档都遵循统一结构见 website/errors/CLAUDE.md包含title、shortDescription、ignorable三个 frontmatter 字段正文由## Code example、## Why is it reported?、## How to fix it三部分组成。function.duplicate标识符与class.duplicate、interface.duplicate、trait.duplicate、enum.duplicate属于同一重复声明系列分别对应类、接口、trait、枚举的重复声明检测。触发场景跨文件的重复函数声明该错误在被分析代码库的多个文件中声明了同名函数时触发。文档给出了最小复现示例// file1.php ?php declare(strict_types 1); namespace App; function helper(): void { }// file2.php ?php declare(strict_types 1); namespace App; function helper(): void { }两个文件都位于App命名空间且都声明了同名函数helper()。PHP 语言本身规定除条件声明外函数名在 PHP 中是全局唯一的同一个命名空间内不允许声明两个同名函数。当 PHPStan 扫描到这类重复声明时就会报告function.duplicate。需要注意的是虽然这个错误通常源于项目自身的代码重复但文档特别指出它的典型触发位置是被注册的stub 文件stub files中。Stub 文件是 PHPStan 提供的用于覆盖第三方 PHPDoc 错误声明的机制——当第三方依赖库的 PHPDoc 不准确时你可以通过 stub 文件提供更准确的函数、类或方法的签名相关概念见 website/src/_posts/solving-phpstan-no-value-type-specified-in-iterable-type.md配置项stubFiles说明见 website/src/config-reference.md。如果你为同一个函数编写了多个 stub或者项目代码与 stub 中声明的函数重复就会触发该错误。底层规则实现在 website/src/errorsIdentifiers.json 中function.duplicate标识符被映射到规则类规则类PHPStan\Rules\Functions\DuplicateFunctionDeclarationRule源码位置src/Rules/Functions/DuplicateFunctionDeclarationRule.php#L67从标识符与规则类的对应关系可以推断该规则在 PHPStan 分析符号表symbol table时工作——当多个被分析文件包括 stub 文件各自携带同名函数的声明导致符号表合并时发生冲突规则即在冲突点报告function.duplicate错误。这类规则是 PHPStan 发现无法执行或不符合开发者意图代码的手段之一该定位原则也体现在 website/errors/CLAUDE.md 的文档写作规范中。如何修复方案一删除重复声明只保留一份如果两份声明内容完全相同直接删除其中一份仅保留一个即可?php declare(strict_types 1); // file2.php namespace App; -function helper(): void -{ -}方案二两处声明本意不同重命名其中一个如果两处声明是有意保留的不同实现则重命名其中一个函数使二者名称不再冲突?php declare(strict_types 1); // file2.php namespace App; -function helper(): void function helperAlternative(): void { }重命名后记得同步更新所有调用该函数的地方避免引入函数未定义类的新问题。方案三检查 stub 文件配置当错误确实来自 stub 文件时除了删除/重命名重复声明还应审视stubFiles配置website/src/config-reference.md确认是否为同一函数编写了多个 stub或 stub 中的函数签名与项目真实代码重复。保持 stub 文件与真实符号的唯一对应是从根源上消除该错误的做法。小结function.duplicate是 PHPStan 在静态发现运行时必然致命错误方向上的典型规则PHP 运行时会在脚本加载阶段直接因Cannot redeclare function终止而 PHPStan 无需运行代码即可提前暴露这一隐患。修复思路归纳为三点同名且同实现→ 删除重复声明只保留一份同名但有意保留多个实现→ 重命名其中一个函数涉及 stub 文件→ 检查stubFiles配置消除 stub 与项目代码之间的符号重复。处理完重复声明后重新运行 PHPStan 即可确认function.duplicate错误消失且不会影响对项目中其余同名符号类、接口、trait、枚举的分析结果。赞分享开发工具代码质量静态分析【免费下载链接】phpstanPHP Static Analysis Tool - discover bugs in your code without running it!项目地址https://gitcode.com/gh_mirrors/ph/phpstan点击查看免费下载相关推荐PHPStan 错误详解 classConstant.nonFinaltrait 常量重声明缺少 final 修饰符的检测与修复PHPStan 错误详解 classConstant.nonFinaltrait 常量重声明缺少 final 修饰符的检测与修复 本篇文章围绕 PHPStan开发工具代码质量静态分析PHPStan 错误详解attribute.nonRepeatable——不可重复属性被重复使用的检测与修复PHPStan 错误详解 attribute.nonRepeatable ——不可重复属性被重复使用的检测与修复 导读 attribute.nonRepeat开发工具代码质量静态分析oh-my-posh 代码变更工作流 Phase 5 验证指南从质量门禁到功能证明的完整实践oh my posh 代码变更工作流 Phase 5 验证指南从质量门禁到功能证明的完整实践 导读 本文是 oh my posh 仓库内嵌的 AI 代码变更工开发工具代码质量静态分析上一篇gh stack alias教程30秒创建gs快捷键提升日常使用效率下一篇3行Python代码实现跨平台图像编辑Flet图像处理全攻略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表