2016-07-15 3 views
2

Editor > Code Style > PHPからエディタコードスタイルの設定をPredefined Style >PSR1/PSR2と設定しました。 PHP Code SnifferとPHP Mess Detectorもインストールされ、設定されています。私はCTRL+ALT+Lを使用してコードをフォーマットするときはいつでも、私は次の問題を得る:PSR2コードスタイルとPHPコードスニファは同意していませんか?

enter image description here

それはなぜですか?元のコードは次のようになります(これはあまり役に立ちませんが、とにかくここにあると思います)。

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

答えて

1

PSR2は、実際には複数行と言うことはありませんあなたの行が複数行の関数呼び出しの中にあるため、IF条件と1つの追加のインデント内にあります。

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

しかし、それは見栄えしません:https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md#46-method-and-function-calls

だから正しいPSR2コードは、おそらくこれです。

私は何をする傾向があることはあなたにこの有効な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はそれに同意するならば、私は見当がつかないしかし、私はそれが持っているように見えるインデントのルールを与えられたかもしれないと思う。

&&を2番目の行の先頭ではなく1行目の末尾に配置することもできます。上記のコードは、PEARコーディング標準で使用されているコードですが、PSR2ではこのためのルールは定義されていません。

1

残念です。 IDEやPHPCSのPSRルールの解釈のバグにヒットしたようです。そのうちの1つが間違っており、バグ報告が必要ですが、PSRルールを注意深く読んで、どれを解決する必要があります。 (両方のバグレポートを作成して解決する方が簡単かもしれません)

(私はもちろん、両方とも最新バージョンがインストールされていると仮定していますが、新しいリリースあなたがまだアップグレードしていない場合、これは良い機会になるかもしれません)

一方、あなたのコードをリファクタリングして、if()のような正直言って、PSRルールを満たしているかどうかに関係なく、きれいなコードではありません。

私はこのような何かを見て、それをリファクタリングします:条件はインデントする必要はなく、PHPStormは明らかにあなたのラインので、1つのインデントを入れている場合は

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

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

これらは同一ではありません。リファクタリングされたバージョンは、有効な文字列関数を関係なく実行します。手動での値が真である場合にのみ元の仕事 – exussum

+0

@exussumあなたが正しいです、その事実が重要である場合、OPはそれを適合させるために調整したいかもしれません。答えのリファクタリング部分は、元の質問に対する主な回答ではなく、脇にあるものとしての示唆にすぎません。 – Spudley

+0

@Spudleyがリファクタリングの提案について私はそれを行うことができましたが、これはコードの唯一のものではなく、 '$ is_valid'フラグが何度か設定されている大きな検証関数の例です – ReynierPM

関連する問題