我已经将编辑器代码样式设置从Editor > Code Style > PHP设置为Predefined Style >PSR1/PSR2。我已经安装并配置了php代码嗅探器和php混乱检测器。每当我使用CTRL+ALT+L格式化代码时,都会遇到以下问题:
php - PSR2代码样式和PHP Code Sniffer不同意吗?-LMLPHP
为什么?原始代码看起来是(我认为不是很有帮助,但无论如何这里是):

public function myTestFunction()
{
    $is_valid = true;

    if ($this->manual_value && !$this->_InputValidator->isValidString(
            $this->manual_value,
            1,
            2,
            Regex::STRING
        )
    ) {
        $is_valid = false;
    }

    return $is_valid;
}

最佳答案

psr2实际上并没有说一个多行if条件需要缩进,但是phpstorm显然是放进了一个缩进,因为您的行在一个if条件中,另外一个缩进是因为您的行在一个多行函数调用中。
psr2确实说多行函数调用必须缩进,但它说它们必须缩进一次。这里有记录:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#46-method-and-function-calls
所以正确的psr2代码可能是:

public function myTestFunction()
{
    $is_valid = true;

    if ($this->manual_value && !$this->_InputValidator->isValidString(
        $this->manual_value,
        1,
        2,
        Regex::STRING
    )
    ) {
        $is_valid = false;
    }

    return $is_valid;
}

但看起来不太好。
我倾向于将psr2与pear标准中的一些多行条件规则相结合,这将为您提供以下有效的psr2代码:
public function myTestFunction()
{
    $is_valid = true;

    if ($this->manual_value
        && !$this->_InputValidator->isValidString(
            $this->manual_value,
            1,
            2,
            Regex::STRING
        )
    ) {
        $is_valid = false;
    }

    return $is_valid;
}

我不知道phpstorm是否会同意这一点,但我认为它可能给出了它似乎拥有的缩进规则。
您也可以将&&放在第一行的末尾,而不是放在第二行的开头。我在上面发布的代码正是pear编码标准所使用的,但是psr2没有为此定义任何规则。

09-18 19:13