如何在PHP中强制执行正确的方法链式调用风格?
如何在PHP中强制执行特定的方法链式调用格式
你需要的是对象变量单独占一行,后续每个链式方法以缩进的->开头的格式,以下是几种可行的实现方式:
PHP CS Fixer
PHP CS Fixer可以通过配置规则直接实现这个需求,核心是两个规则的组合:
binary_operator_spaces:强制->操作符换行,将第一个链式方法移到新行method_chaining_indentation:确保所有链式方法行的缩进一致
在项目根目录的.php-cs-fixer.php配置文件中添加如下规则:
return (new PhpCsFixer\Config()) ->setRules([ 'binary_operator_spaces' => [ 'default' => 'single_space', 'operators' => [ '->' => 'new_line', ], ], 'method_chaining_indentation' => true, ]) ->setFinder(PhpCsFixer\Finder::create()->in(__DIR__));
执行php-cs-fixer fix命令后,代码会自动被修正为你偏好的格式:
$queryBuilderMock ->expects(self::once()) ->method('getQuery') ->willReturn($queryMock);
PHP_CodeSniffer
PHP_CodeSniffer默认没有内置该规则,但可以通过自定义嗅探实现:
- 编写自定义嗅探类,检查链式调用的第一个
->是否与对象变量在同一行,若不符合则标记为错误 - 同时校验后续链式方法行的缩进是否符合要求
- 将自定义嗅探加入规则集后,运行
phpcs可检查格式问题,phpcbf可尝试自动修复
部分社区维护的第三方规则集也可能包含类似的格式检查,可按需选用。
IDE 内置工具(以PHPStorm为例)
如果使用IDE开发,可直接通过代码风格设置强制执行:
- 打开
Settings > Editor > Code Style > PHP > Wrapping and Braces - 找到
Method calls chain选项,设置为Wrap always - 在
Indentation板块确认链式调用的缩进符合你的要求 - 开启
Editor > Inspections > PHP > Code style issues中的相关检查,IDE会实时提示格式错误,也可通过Reformat Code一键修正
内容的提问来源于stack exchange,提问作者Stevan Tosic
相关产品推荐
相关产品推荐

