新闻详情

新闻详情

首页 / 资讯中心 / 详情

PHP-CS-Fixer 规则集解析:使用 @PHP5x4Migration 让代码兼容 PHP 5.4

发布时间:2026/11/4 16:12:14来源:尧图网络
PHP-CS-Fixer 规则集解析:使用 @PHP5x4Migration 让代码兼容 PHP 5.4
开发工具代码质量静态分析Lint格式化【免费下载链接】PHP-CS-FixerA tool to automatically fix PHP Coding Standards issues项目地址https://gitcode.com/gh_mirrors/ph/PHP-CS-Fixer点击查看免费下载本指南围绕 PHP-CS-Fixer 中的PHP5x4Migration规则集展开说明它是什么、包含哪些规则、如何在项目中启用与组合并结合仓库源码解释其命名约定、配置展开机制与底层 Fixer 实现。读完本文你将能独立使用该规则集把代码自动迁移到 PHP 5.4 兼容风格并理解 PHP-CS-Fixer 迁移类规则集的通用运作方式。规则集速览一句话说明它做什么按照 PHP5x4Migration.rst 的定义PHP5x4Migration是一组用于提升代码对 PHP 5.4 兼容性的规则集合规则集描述为Rules to improve code for PHP 5.4 compatibility.与许多迁移类规则集如PHP70Migration、PHP80Migration一样它面向某个具体的 PHP 小版本此处为 5.4把在新版本中推荐、或在旧版本中不可用的写法统一纠正从而让代码在该目标版本上正确运行。它目前只包含一条规则array_syntaxarray_syntax 规则文档即统一 PHP 数组的声明语法。这份精简的规则清单本身就是该规则集的完整内容可以在源码 PHP5x4MigrationSet.php 中得到验证final class PHP5x4MigrationSet extends AbstractMigrationSetDefinition { public function getRules(): array { return [ array_syntax true, ]; } }命名约定PHP5x4 究竟代表什么理解PHP5x4Migration的命名是使用全部迁移类规则集的前提。规则集中每个类的名称都遵循PHP 主版本号 x 次版本号的模式例如PHP5x4Migration→ PHP 5.4PHP7x0Migration→ PHP 7.0PHP8x3Migration→ PHP 8.3其中x是一个可选的占位字符见 AbstractMigrationSetDefinition.php 中parseRuleSetName()的正则#^PHP(\d)x?(\d)Migration.*$#它向后兼容早期版本中不带x的命名如PHP54Migration。解析出的实体与版本号随后被用于自动生成规则集描述return \sprintf(Rules to improve %s for %s %s compatibility., $improvement, $this-getEntity(), $this-getVersionMajorMinor());这也解释了为什么PHP5x4Migration与PHP54Migration的文档描述完全一致——它们指向同一个 PHP 5.4 目标版本。核心规则 array_syntax从长数组到短数组array_syntax的规则描述为 PHP arrays should be declared using the configured syntaxPHP 数组应使用所配置的语法声明。它的实现位于 ArraySyntaxFixer.php是一个可配置规则Configurable Fixer配置项定义在createConfigurationDefinition()中配置项含义允许值默认值syntax使用longarray(...)还是short[...]数组语法long、shortshort对应 array_syntax.rst 中的说明默认配置syntax short下array(1,2);会被转换为[1,2];而配置为[syntax long]时[1,2];会被转换为array(1,2);。--- Original New ?php -array(1,2); [1,2];从源码看该 Fixer 的转换策略是根据目标语法选择候选 Token目标为short时寻找T_ARRAY关键字目标为long时寻找CT::T_ARRAY_BRACKET_OPEN见resolveCandidateTokenKind()。fixToShortArraySyntax()会把array(...)的括号替换为[、]并清除array关键字fixToLongArraySyntax()则把[、]替换回(、)并在前方插入array关键字。它返回的优先级为 37并声明必须运行在BinaryOperatorSpacesFixer、NoWhitespaceInEmptyArrayFixer、SingleSpaceAfterConstructFixer、SingleSpaceAroundConstructFixer、TernaryOperatorSpacesFixer之前见getPriority()的 docblock以保证数组语法统一后再进行空格类处理不会互相干扰。官方行为由测试类 ArraySyntaxFixerTest.php 固化provideFixCases()通过数据提供器覆盖了默认配置与syntax long的多种场景例如yield default configuration [...]; yield [... [syntax long] ...];测试中还验证了非法配置会抛出[array_syntax] Invalid configuration: ... Defined options are: syntax.的异常说明该规则只接受syntax一个配置项。为什么是 PHP 5.4短数组语法的版本背景array_syntax被放进PHP5x4Migration并非偶然PHP 5.4 正式引入了短数组语法[...]。对于仍以 PHP 5.4 为运行目标的项目把array(...)统一为[...]既能利用新语法提升可读性又不会引入兼容性风险——这正是迁移类规则集的设计初衷面向目标版本把代码改写为在该版本中合法且推荐的写法。如何在项目中启用 PHP5x4Migration在命令行直接启用该规则集php php-cs-fixer fix --rulesPHP5x4Migration在配置文件如.php-cs-fixer.php中启用?php $finder PhpCsFixer\Finder::create() -in(__DIR__) ; return (new PhpCsFixer\Config()) -setRules([ PHP5x4Migration true, ]) -setFinder($finder) ;规则集的解析发生在 RuleSet.php 中resolveSet()识别以开头的集合名并递归调用resolveSubset()展开其内部规则最终得到扁平的规则列表。展开过程中PHP5x4Migration内部对array_syntax true的启用等价于直接在配置中写array_syntax true。如果你不想要其中的某条规则可以用false关闭array_syntax falseresolveSet()中array_filter(... false ! $value)的逻辑会将其过滤掉。规则集的组合迁移规则可以层层嵌套PHP5x4Migration不只可以单独使用它还被其他迁移规则集引用。例如 PHP7x0MigrationSet.php 的定义是return [ PHP5x4Migration true, ternary_to_null_coalescing true, ];也就是说启用PHP7x0Migration会自动连带启用PHP5x4Migration的全部规则。这种低版本规则集作为高版本规则集子集的嵌套设计保证迁移到更高版本时不会丢掉低版本的兼容性修正也让规则集之间形成清晰的层级关系。这一点同样可以在 array_syntax.rst 的 Rule sets 一节看到array_syntax同时隶属于PHP5x4Migration、PHP7x0Migration、PHP7x1Migration、PHP7x3Migration、PHP7x4Migration以及各PHP8xxMigration等众多迁移规则集。与已弃用的 PHP54Migration 的关系在旧版命名体系中PHP 5.4 迁移规则集叫PHP54Migration见 PHP54Migration.rst。该规则集现已被标记为DEPRECATED并将在下一个大版本4.0中移除官方明确建议You should usePHP5x4Migrationinstead.从源码看PHP54MigrationSet.php 继承自AbstractMajorMinorDeprecationSetDefinition即专门用于承载旧名称 → 新名称迁移的废弃定义其文档中列出的规则正是对PHP5x4Migration的引用。而在 RuleSet.php 的resolveSubset()中若引用了实现DeprecatedRuleSetDefinitionInterface的规则集会触发Future::triggerDeprecation(...)弃用告警并提示 Use PHP5x4Migration instead。因此在新项目中应直接使用PHP5x4Migration避免继续使用旧名称产生弃用警告。注意事项与使用边界适用范围PHP5x4Migration只包含array_syntax一条规则且目标明确是 PHP 5.4 兼容性。如果你需要更高版本如 7.0、8.0的兼容性修正应选择对应的PHP7x0Migration、PHP8x0Migration等规则集它们会以嵌套方式包含更低版本的修正。命名中的x占位符PHP5x4中的x是版本号命名格式的一部分从源码注释看该占位符计划在 v4 中移除TODO v4 - x? - x届时命名可能统一为PHP54Migration的样式使用时应关注版本更新。规则可配置性array_syntax是可配置规则PHP5x4Migration使用其默认配置syntax short。如需强制长数组风格请在配置中单独覆盖该规则而不是修改规则集本身。小结PHP5x4Migration是 PHP-CS-Fixer 迁移规则集家族中面向 PHP 5.4 的一员通过统一的array_syntax规则将数组声明收敛为短数组语法。它由 PHP5x4MigrationSet.php 定义、由 ArraySyntaxFixer.php 实现并借助 RuleSet.php 的集合展开机制支持嵌套组合与按需关闭是理解整个迁移规则集体系PHP5x4Migration、PHP7x0Migration、PHP8x0Migration……的最佳切入点。赞分享开发工具代码质量静态分析Lint格式化【免费下载链接】PHP-CS-FixerA tool to automatically fix PHP Coding Standards issues项目地址https://gitcode.com/gh_mirrors/ph/PHP-CS-Fixer点击查看免费下载相关推荐五分钟拿到网盘直链8大网盘高速下载不再卡40KB/s五分钟拿到网盘直链8大网盘高速下载不再卡40KB/s 打开共享链接12GB 素材包摆在那下载速度卡在 40KB/s估算一下要等多久人会直接放弃。Lin开发工具代码质量静态分析Lint格式化Midscene.js 快速入门指南5 分钟跑通你的第一个 AI 自动化任务Midscene.js 快速入门指南5 分钟跑通你的第一个 AI 自动化任务 如果你每天要手动重复点击网页、逐条核对页面内容Midscene.js 值得花开发工具代码质量静态分析Lint格式化MTKClient完全指南如何轻松掌控你的联发科设备MTKClient完全指南如何轻松掌控你的联发科设备 你是否遇到过手机变砖无法开机的情况或者想要深度定制设备却无从下手MTKClient正是为你解决这些问开发工具代码质量静态分析Lint格式化上一篇终极指南Time-Series-Library全场景深度学习时间序列分析工具入门到精通下一篇如何高效使用upload-artifact与download-artifact完整的工作流产物管理流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/4 15:56:54

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/3 12:09:35

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/3 12:09:38

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/4 12:33:12

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/4 1:25:31

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/4 3:51:11

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉