PHP
phpcs

PHP CodeSnifferにおけるPSR1,2の検知箇所と対応するSniffer

PSR1

2. ファイル

2.1. PHPタグ

PHPコードは「<?php ?>」または短縮記述の「<?= ?>」を使用しなければなりません。それ以外のタグを使用してはいけません。

  • Generic.PHP.DisallowShortOpenTag

2.2. 文字コード

文字コードは、UTF-8(BOM無し)でなければなりません。

  • Generic.Files.ByteOrderMark

2.3. 副作用

新たなシンボル(クラス、関数、定数など)を宣言するためのファイルと、副作用のある処理を行うためのファイルは、分けるべきです。一つのファイルの中で両方を行うべきではありません。

  • PSR1.Files.Sid​​eEffects

3. 名前空間とクラス名

PSR-0に準拠しなければなりません。
各クラスが、(トップレベルのベンダー名のように)少なくとも1レベルの名前空間となります。

  • PSR1.Classes.ClassDeclaration

クラス名は、StudlyCaps記法で定義しなければなりません。

  • Squiz.Classes.ValidClassName

4. クラス定数、プロパティ及びメソッドについて

4.1. 定数

クラス定数は総じてアンダースコア文字を区切り文字として大文字で定義しなければなりません。

  • Squiz.Classes.ValidClassName

4.3. Methods

メソッド名はcamelCase記法で定義しなければなりません。

  • PSR1.Methods.CamelCapsMethodName

PSR2

2. 一般

2.2 ファイル

全てのPHPファイルの改行コードは、LFでなければなりません。

  • Generic.Files.LineEndings

全てのPHPファイルは、最後に空行を入れなければなりません。

  • PSR2.Files.EndFileNewline

PHPだけが書かれたファイルについては、終了タグ「?>」を省略しなければなりません。

  • PSR2.Files.ClosingTag

2.3. 行

行の長さのソフトリミットは120文字を上限とします。 自動スタイルチェッカーはソフトリミットで警告しなければなりませんが、エラーを出してはいけません。

  • Generic.Files.LineLength

行末に空白文字列を含んではいけません。

  • Squiz.WhiteSpace.SuperfluousWhitespace
  • Squiz.WhiteSpace.SuperfluousWhitespace.StartFile
  • Squiz.WhiteSpace.SuperfluousWhitespace.EndFile
  • Squiz.WhiteSpace.SuperfluousWhitespace.EmptyLines

1行に複数のステートメントがあってはいけません。

  • Generic.Formatting.DisallowMultipleStatements

2.4. インデント

インデントは4つのスペースとしなければなりません。タブによるインデントは用いてはなりません。

  • Generic.WhiteSpace.ScopeIndent
  • Generic.WhiteSpace.DisallowTabIndent

2.5. 予約語とTrue/False/Null

PHPの予約語は小文字で使用しなければなりません。

  • Generic.PHP.LowerCaseKeyword

PHP定数であるtrue、falseそしてnullは小文字でなければなりません。

  • Generic.PHP.LowerCaseConstant

3. 名前空間とuse演算子による定義

名前空間の定義の後に空行が必要です。

  • PSR2.Namespaces.NamespaceDeclaration

use定義は、名前空間宣言の後でなければなりません。
定義ごとにuse演算子が必要です。
use定義のブロックの後には空行が必要です。

  • PSR2.Namespaces.UseDeclaration

4. クラス、プロパティ及びメソッド

extendsとimplementsは、クラス名と同じ行で定義されなけれなりません。
クラスの開き括弧は次の行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。
implements定義は、インデントにより揃えることで、複数行に分割しても構いません。 その際、最初の定義も次の行からはじめるものとし、1行に1つのインターフェイスを定義しなければなりません。

  • PSR2.Classes.ClassDeclaration

4.2. プロパティ

アクセス修飾子は、全てのプロパティに定義しなければなりません。
プロパティ定義に、varは使用してはいけません。
ステートメントあたりに複数のプロパティ定義があってはなりません。
プロパティ名に、protectedまたはprivateを示すためにシングルアンダースコアを使用すべきではありません。

  • PSR2.Classes.PropertyDeclaration

4.3. メソッド

アクセス修飾子は、全てのメソッドに定義しなければなりません。

  • Squiz.Scope.MethodScope
  • Squiz.WhiteSpace.ScopeKeywordSpacing

メソッド名の後ろにスペースを使用してはいけません。 開き括弧は次の行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。 開き括弧の後ろや、閉じ括弧の前にスペースがあってはいけません。

  • PSR2.Methods.FunctionClosingBrace
  • Squiz.Functions.FunctionDeclaration
  • Squiz.Functions.LowercaseFunctionKeywords

4.4. メソッドの引数

引数リストでは、それぞれのカンマの前にスペースがあってはいけません。 また各カンマの後ろには1スペースおかなければなりません。

  • Squiz.Functions.FunctionDeclarationArgumentSpacing
  • Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingAfterHint

デフォルト値を持つ引数は、引数リストの最後に配置しなければなりません。

  • PEAR.Functions.ValidDefaultValue

引数リストは、インデントにより揃えることで、複数行に分割しても構いません。 その際、最初の定義も次の行からはじめるものとし、1行に1つの引数を定義しなければなりません。
引数リストを複数行の分割配置としている場合、閉じ括弧と開き中括弧の間にはスペースを含め同じ行に配置する必要があります。

  • Squiz.Functions.MultiLineFunctionDeclaration

4.5. abstract, final, and static

abstractとfinalはアクセス修飾子の前に定義しなければなりません。
staticはアクセス修飾子の後に定義しなければなりません。

  • PSR2.Methods.MethodDeclaration

4.6. メソッド及び関数の呼び出し

メソッドや関数の呼び出し時は、メソッドや関数名と開き括弧の間にスペースがあってはなりません。 また開き括弧の後や、閉じ括弧の前にスペースがあってもいけません。 引数リストの前にスペースがあってはなりませんが、各カンマの後に1スペースが必要です。
引数リストは、インデントにより揃えることで、複数行に分割しても構いません。 その際、最初の定義も次の行からはじめるものとし、1行に1つの引数を定義しなければなりません。

  • Generic.Functions.FunctionCallArgumentSpacing
  • PSR2.Methods.FunctionCallSignature.SpaceAfterCloseBracket
  • PSR2.Methods.FunctionCallSignature.OpeningIndent

5. 制御構造

制御構造キーワードの後には1スペースを設けなければなりません。
開き括弧の後にスペースを配置してはなりません。
閉じ括弧の前にスペースを配置すべきではありません。
開き括弧と閉じ中括弧の間にはスペースを挟まなければなりません。
構造本文は1インデント下げなければなりません。
閉じ括弧は構造本文の後に改行して配置しなければなりません。

  • Squiz.ControlStructures.ControlSignature
  • Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen
  • Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose
  • Squiz.WhiteSpace.ScopeClosingBrace
  • Squiz.ControlStructures.ForEachLoopDeclaration
  • Squiz.ControlStructures.ForLoopDeclaration
  • Squiz.ControlStructures.LowercaseDeclaration
  • PSR2.ControlStructures.ControlStructureSpacing
  • Squiz.ControlStructures.ForEachLoopDeclaration.AsNotLower

各構造本文は、中括弧で囲わなければなりません。 これは構造の見え方を標準化し、追加実装等が発生した際のエラーを抑えます。

  • Generic.ControlStructures.InlineControlStructure

5.1. if, elseif, else

全てのキーワードが1単語に見えるように、else ifではなくelseifを使うべきです。

  • PSR2.ControlStructures.ElseIfDeclaration

5.2. switch, case

case文はswitchからインデントし、break(またはその他の終端キーワード)は、case内本文と同じレベルのインデントで揃えなければなりません。 また意図的に処理スルーさせる場合は「// no break」等、コメントしなければなりません。

  • PSR2.ControlStructures.SwitchDeclaration

6. Closure

クロージャは、functionキーワードの後にスペースを、useキーワードの前後にスペースが必要です。
開き括弧は同じ行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。
引数または変数リストの開き括弧の後にスペースがあってはなりません。 また閉じ括弧の前にスペースがあってもなりません。
引数または変数リストの前にスペースがあってはなりませんが、各カンマの後に1スペースが必要です。
デフォルト値を持つ引数は、引数リストの最後に配置しなければなりません。
引数または変数リストは、インデントにより揃えることで、複数行に分割しても構いません。 その際、最初の定義も次の行からはじめるものとし、1行に1つの引数または変数を定義しなければなりません。
引数または変数リストを複数行の分割配置としている場合、閉じ括弧と開き中括弧の間にはスペースを含め同じ行に配置する必要があります。

  • Squiz.Functions.MultiLineFunctionDeclaration

参考

PSR-1 基本コーディング規約(日本語)
PSR-2 コーディングガイド(日本語)

PSR1 ruleset.xml
PSR2 ruleset.xml