簡體   English   中英

PSR2代碼風格和PHP Code Sniffer不同意?

[英]PSR2 code style and PHP Code Sniffer doesn't agreed?

我已經設置了編輯器代碼樣式設置,從Editor > Code Style > PHP作為Predefined Style >PSR1/PSR2 我也安裝並配置了PHP Code Sniffer和PHP Mess Detector。 每次使用CTRL+ALT+L格式化代碼時,都會出現以下問題:

在此輸入圖像描述

這是為什么? 原始代碼看起來像(我認為不是那么有用,但無論如何它在這里):

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;
}

這很不幸; 看起來你只是在你的IDE或PHPCS對PSR規則的解釋中遇到了一個錯誤。 其中一個是錯誤的並且需要提出錯誤報告,但是您需要仔細閱讀PSR規則以確定哪一個。 (為它們提出錯誤報告可能更容易,並讓它們解決)

(我當然,假設你已經安裝了最新版本的兩個版本;我注意到PHPStorm的新版本剛剛問世,所以如果你還沒有升級,那么這可能是一個很好的機會)

同時,我建議重構你的代碼以阻止你的if()語句看起來像那樣 - 說實話,它不是看起來很干凈的代碼,無論它是否符合PSR規則。

我會重構它看起來像這樣:

public function myTestFunction()
{
    $input_is_valid = $this->_InputValidator->isValidString(
        $this->manual_value,
        1,
        2,
        Regex::STRING
    );

    return ($this->manual_value && !$input_is_valid);
}

PSR2實際上並不是說多線IF條件需要縮進,但PHPStorm顯然是1縮進,因為你的線在IF條件內並且還有1個縮進,因為你的線在多線函數調用中。

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沒有為此定義任何規則。

內縮進

[英]Indentation inside of <?php tag with PHP Code Sniffer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM