You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP CodeSniffer的Generic.WhiteSpace.ScopeIndent规则疑似存在Bug

问题分析与解答

你的示例代码:

<?php

while ( false )
    for ( $i = 1; $i < 10; $i++ )
    {
        $k = 1;
        $i = 1;
    }
$t = 3;
$s = 5;

PHP CodeSniffer检测报错:

4 | ERROR | [x] Line indented incorrectly; expected 0 spaces, found 4
8 | ERROR | [x] Line indented incorrectly; expected 0 spaces, found 4

这不是Generic.WhiteSpace.ScopeIndent规则的Bug,而是规则的默认行为:

  • 不带大括号的控制结构(此处的while),其紧跟的后续代码块(此处的for循环)不需要缩进,规则要求它和while保持同一缩进级别(0空格)。
  • 第8行的闭合大括号属于for循环的作用域,规则要求它和for语句的缩进级别一致,而非比while多一层缩进。

如果想要让代码符合规则,有两种修改方式:

  1. 给while循环添加大括号,使for循环作为while的子代码块,此时缩进4格就符合规则:
<?php

while ( false ) {
    for ( $i = 1; $i < 10; $i++ )
    {
        $k = 1;
        $i = 1;
    }
}
$t = 3;
$s = 5;
  1. 调整缩进,让for循环与while同级别,闭合大括号与for同级别:
<?php

while ( false )
for ( $i = 1; $i < 10; $i++ )
{
    $k = 1;
    $i = 1;
}
$t = 3;
$s = 5;

内容的提问来源于stack exchange,提问作者Dmitriy Sirenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 22:45:31