![](/img/trans.png)
[英]PSR2 with class declarations extending classes with namespaces in 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沒有為此定義任何規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.