开发工具代码质量静态分析Lint格式化【免费下载链接】PHP-CS-FixerA tool to automatically fix PHP Coding Standards issues项目地址https://gitcode.com/gh_mirrors/ph/PHP-CS-Fixer点击查看免费下载short_scalar_cast是 PHP-CS-Fixer 中负责规范化类型转换cast写法的规则它会把(boolean)、(integer)等冗长的转换写法统一替换为等价的短写法(bool)、(int)、(float)、(string)。本文以官方规则文档为主体结合仓库内 Fixer 源码、测试用例 与规则集定义完整讲解该规则的行为、转换映射、实现原理、所属规则集及实际启用方式帮助你直接在项目中落地这套规范。规则概述在 PHP 中类型转换可以使用多种等价的写法例如布尔转换既可以写(boolean)也可以写(bool)整型转换可以写(integer)或(int)。这些长写法在功能上与短写法完全等价但增加了代码冗余也破坏了团队风格的统一。short_scalar_cast规则强制要求使用短写法其官方定义见 doc/rules/cast_notation/short_scalar_cast.rst为Cast(boolean)and(integer)should be written as(bool)and(int),(double)and(real)as(float),(binary)as(string).即(boolean)应写作(bool)(integer)应写作(int)(double)和(real)应写作(float)(binary)应写作(string)。转换映射表该规则的核心转换逻辑集中定义在 ShortScalarCastFixer.php 中是一张确定的键值映射表原始写法转换后写法说明(boolean)(bool)布尔转换(integer)(int)整型转换(double)(float)浮点转换(real)(float)浮点转换real为历史别名(binary)(string)二进制字符串转换统一为(string)从源码看转换时会将转换关键字先做小写化strtolower再查表因此(BOOLEAN)、(Boolean)、(INTEGER)等大小写变体同样会被识别并转换而(string)、(array)、(object)、(unset)等不在映射表中的写法则保持原样、不做任何改动。转换前后对比示例官方文档给出了完整的转换前后差异示例见 short_scalar_cast.rst--- Original New ?php -$a (boolean) $b; -$a (integer) $b; -$a (double) $b; $a (bool) $b; $a (int) $b; $a (float) $b; -$a (binary) $b; $a (string) $b;可以看到四条赋值语句中的长写法转换被统一替换为短写法语义完全不变代码却更加简洁一致。(binary)在 PHP 中本身是一个无实际操作no-op的转换统一写作(string)也更符合大多数团队的认知习惯。源码实现剖析该规则对应的 Fixer 类为PhpCsFixer\Fixer\CastNotation\ShortScalarCastFixer继承自AbstractFixer实现非常精简核心只有两个阶段。候选检测isCandidate()public function isCandidate(Tokens $tokens): bool { return $tokens-isAnyTokenKindsFound(Token::getCastTokenKinds()); }isCandidate()用于快速判断当前文件是否值得进一步处理只要文件 token 流中存在任何类型转换 tokenT_ARRAY_CAST、T_BOOL_CAST、T_DOUBLE_CAST、T_INT_CAST、T_OBJECT_CAST、T_STRING_CAST、T_UNSET_CAST以及自定义的T_VOID_CAST见 Token.php就返回true。这是一种低成本的前置过滤绝大多数不含转换操作的文件会被直接跳过保证性能。转换逻辑applyFix()protected function applyFix(\SplFileInfo $file, Tokens $tokens): void { for ($index 0, $count $tokens-count(); $index $count; $index) { if (!$tokens[$index]-isCast()) { continue; } $castFrom trim(substr($tokens[$index]-getContent(), 1, -1)); $castFromLowered strtolower($castFrom); $castTo [ boolean bool, integer int, double float, real float, binary string, ][$castFromLowered] ?? null; if (null $castTo) { continue; } $tokens[$index] new Token([ $tokens[$index]-getId(), str_replace($castFrom, $castTo, $tokens[$index]-getContent()), ]); } }applyFix()的流程可以拆解为四步遍历 token 流逐一检查每个 token 是否为转换 tokenisCast()非转换 token 直接跳过。提取转换关键字对 token 内容(boolean)去掉首尾的括号substr(..., 1, -1)并trim得到关键字boolean再strtolower统一小写保证大小写不敏感匹配。查表映射在小写化后的关键字上执行映射表查询命中则得到目标关键字未命中如string、array、object则continue跳过。原位替换通过str_replace仅替换 token 内容中命中关键字的部分保留 token 原有的 ID 类型生成新的Token写回原位置。由于替换只作用于关键字本身转换括号内的空格等其它细节不会被破坏。这种只改关键字、不动其它内容的设计让该规则可以放心地与处理空格、大小写的其它 cast 规则组合使用。哪些写法不会被修改结合 ShortScalarCastFixerTest.php 的测试数据可以明确该规则的不干预边界已属于短写法的转换(string)、(array)、(object)等不在映射表中的写法不会被修改即使它们带有空格、首字母大写或全大写如( String )、(ARRAY)也保持原样PHP 8 之后的(real)测试中real float的用例被标注为RequiresPhp( 8.0.0)见 测试文件仅在 PHP 8.0 之前运行。这是因为 PHP 8.0 起(real)转换已被弃用不再作为独立转换 token 被解析同理(unset)的相关用例也只针对 PHP 8.0大小写不敏感但保持原空格测试覆盖了( %s )$a、(%s) $d、(%s)$d、( %s)、(%s )等多种空格布局转换后仅替换关键字括号内外的空格布局保持不变这与cast_spaces规则负责的空格规范化职责相互独立。所属规则集该规则被多个官方规则集收录依据 short_scalar_cast.rst 的 Rule sets 一节启用这些规则集即会自动应用本规则规则集说明PER-CSPSR 编码风格当前版本PER-CS1x0PER-CS 1.xPER-CS2x0PER-CS 2.xPER-CS3x0PER-CS 3.xPHP7x4MigrationPHP 7.4 迁移PHP8x0MigrationPHP 8.0 迁移PHP8x1MigrationPHP 8.1 迁移PHP8x2MigrationPHP 8.2 迁移PHP8x3MigrationPHP 8.3 迁移PHP8x4MigrationPHP 8.4 迁移PHP8x5MigrationPHP 8.5 迁移PhpCsFixerPHP-CS-Fixer 自身代码风格PSR12PSR-12 编码风格SymfonySymfony 编码风格其中以x替代次版本号的1x0/2x0/3x0、8x08x5命名的为当前生效的规则集而旧式带完整版本号的 PER、PER-CS1.0、PER-CS2.0、PER-CS3.0 以及 PHP74MigrationPHP85Migration 在官方文档中均标注为deprecated已弃用建议新项目直接使用对应x命名的替代版本。从规则集源码也可以直接印证该规则的收录情况例如 PHP7x4MigrationSet.php 中声明了short_scalar_cast truePSR12Set.php 同样将其纳入 PSR-12 规则集。也就是说只要你的项目遵循 PSR-12 或任何上述迁移规则集这类长写法转换会自动被修正。如何启用与使用方式一配置文件推荐在项目根目录的.php-cs-fixer.php中单独启用该规则?php return (new PhpCsFixer\Config()) -setRules([ short_scalar_cast true, ]) -setFinder( PhpCsFixer\Finder::in(__DIR__) -exclude(vendor) );更常见的做法是直接启用包含它的规则集例如PSR12或Symfony?php return (new PhpCsFixer\Config()) -setRules([ PSR12 true, ]) -setFinder(PhpCsFixer\Finder::in(__DIR__));方式二命令行临时指定不修改配置文件在命令行中直接指定规则执行修复php php-cs-fixer fix path/to/file.php --rulesshort_scalar_cast执行后可用--dry-run --diff先预览改动确认无误再实际写入。官方测试与向后兼容承诺该规则的官方测试类为PhpCsFixer\Tests\Fixer\CastNotation\ShortScalarCastFixerTest见 ShortScalarCastFixerTest.php其测试数据覆盖了boolean/integer/double/binary四组基础转换含首字母大写、全大写输入(real)在 PHP 8.0 下的转换(string)/(array)/(object)等不转换写法的回归保护防止误改多种空格布局下仅替换关键字、不破坏其它格式。正如官方文档所强调的该测试类定义的行为即官方支持的行为每个测试用例都是向后兼容承诺backward compatibility promise的一部分。这意味着在后续版本中该规则的转换映射和边界行为不会发生破坏性变化你可以放心将它纳入团队规范长期使用。小结short_scalar_cast是一条小而稳的规范化规则通过一张确定的映射表把(boolean)、(integer)、(double)、(real)、(binary)五种长写法统一为(bool)、(int)、(float)、(string)短写法并保证大小写不敏感、不触碰空格等其它格式。它同时被 PSR-12、PER-CS、Symfony 及多代 PHP 迁移规则集收录配合cast_spaces规范转换括号内空格和lowercase_cast统一转换关键字大小写等 cast_notation 目录下的相邻规则可以完整建立起一套统一、简洁、可预测的类型转换书写规范。赞分享开发工具代码质量静态分析Lint格式化【免费下载链接】PHP-CS-FixerA tool to automatically fix PHP Coding Standards issues项目地址https://gitcode.com/gh_mirrors/ph/PHP-CS-Fixer点击查看免费下载相关推荐PHP-CS-Fixer no_alternative_syntax 规则把 PHP 替代语法统一重写为花括号写法PHP CS Fixer no_alternative_syntax 规则把 PHP 替代语法统一重写为花括号写法 本指南围绕 PHP CS Fixer 内置开发工具代码质量静态分析Lint格式化PHP-CS-Fixer 的 simple_to_complex_string_variable 规则将 ${var} 统一转换为 {$var} 插值语法PHP CS Fixer 的 simple_to_complex_string_variable 规则将 ${var} 统一转换为 {$var} 插值语法 s开发工具代码质量静态分析Lint格式化PHP-CS-Fixer modernize_types_casting 规则详解将 intval/strval 等函数调用统一转换为类型强制转换PHP CS Fixer modernize_types_casting 规则详解将 intval/strval 等函数调用统一转换为类型强制转换 导读 mo开发工具代码质量静态分析Lint格式化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Ollama+Qwen3本地部署实战:从零跑通大模型 我第一次在本地跑通大模型,前前后后折腾了一整天:装Python、配CUDA、装transformers、下模型权重、写推理脚本,最后还被各种依赖冲突逼到差点重装系统。后来接触到Ollama才知道,本地跑大模型根本不该那么痛苦。这篇文章就记录我用… · 2026/9/23 2:19:11
Cosmos 区块链原理与极简 Java 实现:从去中心化账本到可运行的 PoW 区块 教程示例工程 【免费下载链接】cosmos Worlds largest Contributor driven code dataset | Used in Quark Search Engine, OpenGenus IQ, OpenGenus Visual Project 项目地址: https://gitcode.com/gh_mirrors/co/cosmos 点击查看 免费下载 本文以 Cosmos 仓库中的… · 2026/9/23 2:19:05
3步搞定电脑服务报错 保姆级教程解析源码 3步搞定电脑服务报错 保姆级教程解析源码 面对满屏红色的 StackTrace,你是不是脑子嗡嗡响?别慌,这就是典型的“电脑服务”启动失败引发的连环报错。很多新手看到 ServiceControlException 或 Access… · 2026/9/23 2:19:05
2025年AI编程工具大盘点:从补全到Agent,选型与避坑指南 1. 2025年AI编程工具,为什么值得单独写一篇年度汇总作为天天和代码打交道的开发者,2025年我最大的感受是:AI编程工具已经从“可选的玩具”变成了“默认的生产力基础设施”。以前写一段业务逻辑,要先想半天API设计、翻半天老代码&a… · 2026/9/23 3:06:55
插件配置与优化指南:从编辑器到浏览器的效率提升实践 1. 从"装了就忘"到"按需定制":插件生态的底层逻辑大多数人对待插件的态度,基本停留在"别人推荐什么就装什么"的阶段。装完之后要么从来没打开过,要么默认配置用到天荒地老,甚至根本不知道它到底改变… · 2026/9/23 3:06:55
32款AI编程工具横评:从Cursor到Copilot,谁才是代码助手天花板? 这段时间我干了一件挺费劲但也挺有意思的事:把市面上能装到的 32 个 AI 编程工具挨个装了一遍。你没看错,是 32 个,不是 3 个 2 个。从大厂嫡系的 GitHub Copilot、Cursor,到开源社区的 Aider、Continue,再到各种号称“… · 2026/9/23 3:06:55
用CSDN列表页API快速获取全部博文数据:100秒实现年度盘点 做技术写作这行,每年年底自然要做一次内容盘点。我今年的复盘对象是CSDN上的博文,一共写了几百篇,真要一篇篇从后台复制标题、记录数据,估计得耗掉一整天。结果我发现,CSDN博文list页面背后直接架着一条数据接口&#… · 2026/9/23 3:06:55
IntelliJ IDEA快捷键实战:从鼠标流到键盘流的高效开发指南 你有没有过这种时刻:正写到一半,突然想切到另一个类看一眼,于是右手离开键盘,握住鼠标,光标挪到左侧 Project 树,一层一层展开目录,点开目标文件,扫两眼,再切回来——刚才… · 2026/9/23 3:06:48
Yii2 缓存机制全面解析:数据缓存、查询缓存、片段缓存、页面缓存与 HTTP 缓存实战指南 后端Web框架 【免费下载链接】yii2 Yii 2: The Fast, Secure and Professional PHP Framework 项目地址: https://gitcode.com/gh_mirrors/yi/yii2 点击查看 免费下载 缓存是 Web 应用提升性能的一种廉价而有效的手段:把相对静态的数据存入缓存… · 2026/9/23 3:06:36
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29