PHPのコーディング規約 PSR-0、PSR-1、PSR-2、PSR-3とは
こんにちは、@9ensanです。
PHPには、今まで様々なコーディング規約があり、例えば
などなどです。
ここまで、それぞれでコーディング規約があり統一が取られておらずまた、その為に独自のコーディング規約を作る人もいました。
これに対して、「PHP-FIG」という有名なPHPのプロジェクトが参加しているグループが、共通点をルール化して、新しいコーディング規約を作成しています。
それが「PSR-0、PSR-1、PSR-2、PSR-3」です。
これからのPHPのコーディング規約はPSRに従うのが一番だと思います。既に様々な有名フレームワークもPSRに従うように修正が加えられています。
PSRの日本語化リンク
PSR-0、1、2は日本語化してくれている人がいるので読んでみるのが一番です。
参考URL
一番PSRを勉強するのに参考になるまとめられているサイトです。
ここから先は自分の為の覚書です。
PSR-0
オートローダーの為のコーディング規約
名前空間の命名規則
アルファベットの大文字小文字は自由
\<Vendor Name>\(<Namespace>\)*<Class Name>
Vendor Nameについて
名前空間を汚さない為に、固有のベンダー名を最初に付ける。
Namespaceについて
自由に名前空間をつけていい。
Class Nameについて
クラス名にアンダースコアが含まれる場合、「DIRECTORY_SEPARATOR」に変換されファイルパスとします。
「.php」付けてファイルパスとします。
Namespaceの区切り文字について
名前空間の区切り文字は「DIRECTORY_SEPARATOR」に変換されファイルパスとします。
上記ルールで作成された、ファイルパスを元に対象ファイルを探してオートロードします。
PSR-0のオートローダー実装例
PSR-1
基本的なコーディング規約
PHPタグ
「<?php」「<?=」のどちらかを使用しなければならない。
文字コード
UTF-8のBOM無しを使用する。
名前空間とクラス名
PSR-0に準拠する。
クラスはそれぞれ単独でファイルに存在し、少なくとも1レベルの名前空間に属する。
クラス名は「StudlyCaps記法」で記述する(各単語の先頭文字を大文字とする記法)
クラス定数
全て大文字で、区切り文字はアンダースコアで記述する。
プロパティ
StudlyCaps記法、camelCase記法、under_score記法のどれで記述するか特定しない。
しかし、ベンダーレベル、パッケージレベル、クラスレベル、メソッドレベルでは統一が取れているべきである。
メソッド
camelCase記法で記述します。
副作用
クラスの定義と、読み込んだだけで何かしらの影響を与える事を同一ファイルに記述しない。
PSR-2
コーディングスタイル規約(PSR-1に準拠する事が前提)
ファイル
改行コードはLFを使用する。
ファイルの最後に空行を入れる。
「?>」は省略する。
行
絶対的な文字数制限はしない、120文字でゆるい文字数制限を設ける。
1行は80文字以内にするべき、80文字を越える場合は複数行に改行する。
行末に空白文字列を記述してはいけない。
読みやすくしたり、関連性を示す為に適度に空行を加えて構わない。
1行は1ステートメントにする。
インデント
4つのスペースを使用する。(タブを使用してはいけない)
予約語とTrue/False/Null
予約後は小文字で記述する。
PHPのコンスタント値「true」「false」「null」は小文字で記述する。
名前空間とuseによる定義
名前空間の定義の後に空行を1行設ける。
useは、名前空間宣言の後に記述する。
宣言1つずつuseを記述します。
useブロックの後に空行を1行設ける。
クラス、extends、implements
extendsとimplementsは、クラス名と同じ行で記述する。
開きカッコ「{」は、次の行に記述する。
閉じカッコ「}」は、内容を記述した次の行に記述する。
implements定義は、インデントで揃えて複数行にまたがるように記述してもよい。その場合は、最初の記述も次の行からはじめて1行に1つのインターフェース名を記述する。
プロパティ
アクセス修飾子を全てのプロパティに記述する。
「var」は使用してはいけない。
1行に1つのプロパティを宣言する。
protectedやprivateを宣言するのにアンダースコアを使用してはいけない。
メソッド
アクセス修飾子は記述する。
protectedやprivateを宣言するのにアンダースコアを使用してはいけない。
メソッド名の後ろにスペースは開けない。
開きカッコ「{」は、次の行に記述する。
閉じカッコ「}」は、内容を記述した次の行に記述する。
開きカッコの後、閉じカッコの前にスペースは記述しない。
メソッドの引数
引数は、それぞれのカンマの前にスペースを記述しない。
また、カンマの後ろには1つスペースを記述する。
デフォルト値は、引数リストの最後に記述する。
引数は、インデントで揃えて複数行にまたがるように記述してもよい。その場合は、最初の記述も次の行からはじめて1行に1つの引数を記述する。
引数を複数行に記述した場合は、引数の閉じカッコ「)」とメソッドの開きカッコ「{」はスペースを挟んで同じ行に記述する。
abstruct、final、static
abstruct、finalはアクセス修飾子の前に記述する。
staticはアクセス修飾子の後ろに記述する。
メソッド、関数呼び出し
メソッド、関数呼び出し時は、開きカッコ「(」の前にスペースを記述してはいけない。
開きカッコ「(」の後ろ、閉じカッコ「)」の前にもスペースを記述してはいけない。
引数の前にスペースを記述をしてはいけない。
各カンマの後ろにスペースを1つ記述する。
引数は、インデントにより揃える事で複数行に記述してもよい。その場合は、最初の記述も次の行からはじめて1行に1つの引数を記述する。
if、elseif、else
ifの後ろにスペースを記述する。
elseif、elseの前後にスペースを記述する。
開きカッコ「{」、閉じカッコ「}」は、if、elseif、elseと同じ行に記述する。
最後の閉じカッコは本文の最後の次の行に記述する。
switch、case
switch、caseの後ろにスペースを1つあける。
case文はswitch文からインデントする。
breakはcase文の中の本文と同じインデントで記述する。
意図的にbreakを記述せずに処理をスルーさせる場合は、「// no break」のようにコメントを記述する。
最後の閉じカッコは本文の最後の次の行に記述する。
while、do while
whileの後ろにスペースを1つ記述する。
開きカッコはwhileと同じ行に記述する。
doの後ろにスペースを1つ記述する。
do-whileの場合、whileの前後にスペースを1つ記述する。
最後の閉じカッコは本文の最後の次の行に記述する。
for
forの後ろに1つスペースを記述する。
セミコロンの後ろは1つスペースを記述する。
開きカッコ「{」はforと同じ行に記述する。
最後の閉じカッコは本文の最後の次の行に記述する。
foreach
foreachの後ろに1つスペースを記述する。
開きカッコ「{」はforと同じ行に記述する。
最後の閉じカッコは本文の最後の次の行に記述する。
try、catch
tryの後ろに1つスペースを記述する。
catchの前後に1つスペースを記述する。
try、catchと同じ行に開きカッコ、閉じカッコは記述する。
最後の閉じカッコは本文の最後の次の行に記述する。
Closure
functionの後ろにスペースを1つ記述する。
useの前後にスペースを1つ記述する。
開きカッコはfunctionと同じ行に記述する。
最後の閉じカッコは本文の最後の次の行に記述する。
引数の開きカッコの後ろにスペースを記述してはいけない。
引数の閉じカッコの前にスペースを記述してはいけない。
引数の前にスペースは記述してはいけない。
引数の各カンマの後はスペースを記述する。
デフォルトの値を持つ引数は最後に記述する。
引数は、インデントにより揃えて複数行に記述してもよい。その場合は、最初の記述も次の行からはじめて1行に1つの引数を記述する。
引数を複数行に記述する場合、開きカッコ「{」は引数の閉じカッコ「)」と同じ行に記述する。
クロージャが引数に直接記述された場合も同様のルールとなる。
PSR-3
ログのインターフェース規約
結構今まで自分か書いてきているものと違うルールもありますが、こんな感じで「PHP-FIG」が新基準を決めてくれているのでPHPでもコーディング規約にもう迷わないで済みそうです。
関連する記事:
- PHPを最新コーディング規約に合わせて修正してくれるツール「PHP Coding Standards Fixer」
- [Android] プログラム中でstrings.xmlの文字列を取得する方法
- さくらのVPSへのiptablesの設定
- PHPでComposerを使ってインストール可能なライブラリの作り方
- AndroidManifest.xmlに記述した
のデータ取得方法
コメント 0