目的
- PSR-2 コーディングガイドの内容が堅苦しくてぱっと理解できなかったため自分用に解説してみる
PSR-2の「概要」に記載されている内容
- インデントには4つのスペースを使用し、タブは使用してはいけません。
- 行の長さに対してハードリミットがあってはいけません。ソフトリミットは120文字を上限とし、実際は80文字以内に抑えるべきです。
- 名前空間定義のあとには空行を挟まなければいけません。またuse定義ブロックのあとにも同様に空行を挟まなければなりません。
- クラスの開き括弧は次の行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。
- メソッドの開き括弧は次の行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。
- アクセス修飾子は、全てのプロパティ、メソッドに定義しなければなりません。またabstractとfinalはアクセス修飾子の前に定義し、staticはアクセス修飾子の後に定義しなければなりません。
- 制御構造の開始時は、その後に1スペースを開けなければなりません。メソッドや関数の呼び出しはスペースを開けてはいけません。
- 制御構造の開き括弧は同じ行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。
概要に記載されている内容の解説
インデントには4つのスペースを使用し、タブは使用してはいけません。
- これは記載されている内容そのままでもわかる。
- tabを使ったインデントはNG、半角スペース×4でインデントを作る。
行の長さに対してハードリミットがあってはいけません。ソフトリミットは120文字を上限とし、実際は80文字以内に抑えるべきです。
- 多分1ステップに記載する文字数制限の事
- ハードリミットとは「1ステップはこの文字数でないといけない」という成約
- 少なからず1ステップは120文字以下にすれば問題ない。努力目標として80文字以下にしよう。
名前空間定義のあとには空行を挟まなければいけません。またuse定義ブロックのあとにも同様に空行を挟まなければなりません。
-
namespace
やuse
のあとに一行空の行を入れないといけない。
クラスの開き括弧は次の行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。
- これも記載されている内容そのままで、クラスの括弧は次の行に記載する。
-
下記はNG
class Sample{ public function sampleFunction() { //メソッドの内部処理 } }
-
下記はOK
class Sample { public function sampleFunction() { //メソッドの内部処理 } }
メソッドの開き括弧は次の行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。
- これも記載されている内容そのまま&クラスの記載方法と同じ。
-
下記はNG
class Sample { public function sampleFunctionA(){//メソッドの内部処理 } public function sampleFunctionB(){ //メソッドの内部処理 } }
-
下記はOK
class Sample { public function sampleFunctionA() { //メソッドの内部処理 } public function sampleFunctionB() { //メソッドの内部処理 } }
アクセス修飾子は、全てのプロパティ、メソッドに定義しなければなりません。またabstractとfinalはアクセス修飾子の前に定義し、staticはアクセス修飾子の後に定義しなければなりません。
- アクセス修飾子はメソッドや変数定義の際に書く「public」や「private」や「protected」とかのやつ。
- メソッドやメソッドを定義する時に「public」や「private」や「protected」は必ず記載しないといけない。
- 抽象クラスの定義時に使用する「abstract」や小クラスから上書きされないメソッドを定義するときに使用する「final」は「public」や「private」や「protected」の前に定義しないといけない。
制御構造の開始時は、その後に1スペースを開けなければなりません。メソッドや関数の呼び出しはスペースを開けてはいけません。
- 制御構造キーワード(ifなど)の後ろは1スペースを開ける必要がある。
- メソッドや関数の呼び出しのときにメソッド・関数名の直後にスペースを開けてはいけない。
-
下記はNG
class Sample { public function sampleFunctionA() { $this->foo ($strA,$strB); } public function sampleFunctionB() { if(true) { echo 'OK' } } }
-
下記はOK
class Sample { public function sampleFunctionA() { $this->foo($strA, $strB); } public function sampleFunctionB() { if (true) { echo 'OK' } } }
制御構造の開き括弧は同じ行に記述しなければなりません。また閉じ括弧は本文最後の次の行に記述しなければなりません。
-
下記はNG
class Sample { public function sampleFunctionA() { $this->foo(); } public function sampleFunctionB() { if (true) { echo 'OK'} } }
-
下記はOK
class Sample { public function sampleFunctionA() { $this->foo(); } public function sampleFunctionB() { if (true) { echo 'OK' } } }