PSR 0/1/2 の関係性
- PSR-0 「名前空間に関する規約」
- PSR-1 「名前空間 クラスについては、PSR-0に準拠すること」
- PSR-2 「PRS-1のコーディングスタイルに準拠すること」
PSR-0
- 名前空間は
\<Vendor Name>\(<Namespace>\)*<Class Name>
とすること - 必ずトップレベルのベンダー名を持つこと。
- 名前空間のセパレータ
\
をディレクトリ区切りとして、適切にファイルシステムからクラスを読み込める状態であること - 拡張子は
.php
とする。
PSR-4
- PSR-0 との併用が可能
- クラスには インターフェイスやトレイト及び同様の構造を含む。
-
_
に特別な意味を持たせることをやめる。 - クラス名は全て大文字小文字を区別すること。
PSR-1/2
命名規則
- アンダースコアはじめの変数名は禁止
- 変数名はスネークケースも、キャメルケースもどっちもOKだけど、適切なスコープ内での統一はとること
- クラス名は 先頭大文字のキャメルケース
- クラス定数は アンスコ 区切りの大文字で
- メソド名は 先頭小文字のキャメルケース
制御構造
- 制御構造の開始時には スペースを一つ開ける(
if (true) {
) - 制御構造の
{
は同じ行に記述する。 - 制御構造の
}
は最終行の次の行に記述する。 -
else if
ではなくelseif
で -
break
しないswitch 文には その旨を明示的にコメントする。
<?php
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
<?php
foreach ($iterable as $key => $value) {
// foreach body
}
<?php
try {
// try body
} catch (FirstExceptionType $e) {
// catch body
} catch (OtherExceptionType $e) {
// catch body
}
クラス
- アクセス修飾子(public/protected など)は必須
- abstract / final はアクセス修飾子の前
- static はアクセス修飾子の後
- 制御構造の
()
と異なり、メソドや関数呼び出しの()
の前にはスペースをけてはいけない。 メソドや関数呼び出しの引数リストが複数行に渡る場合、インデントを付けて1行に一つの引数を定義する。閉じカッコは最後の引数の次の行に1行で記述する。
クラス、メソドの
{
は次の行に記述する。メソドの引数リストは
hoge($arg1, &$arg2, $arg3 = [])
のように,
の後ろにスペースを添えて記述する引数が多い場合は、最初の引数から行を変え、インデントを付けて1行に一つの引数を定義する。 ブロックの開始行は
){
とする。extends と implements は同じ行に記述する。
implements のリストは、インデントを付与して 複数行に分割することも可。ただしその場合1行に一つのインターフェイスを記述する。
class Hoge extends Piyo implements
\Fooable,
\Barable
{
レイアウト
- 名前空間定義の後には空行を挟む
- use 定義ブロックの後にも空行を挟む
その他
- 文字コードは utf8 でBOMなし
- 改行コードは LF
- インデントはスペースで4つ分
- ファイル最後には必ず空行
- PHPのみが書かれたファイルでは ?> を省略する。
- クラス、関数などの宣言ファイルと、処理系のファイルは分ける
- 一行に複数のステートメントは禁止
- 予約後は
true
など小文字で表示する。
出展
http://www.php-fig.org/psr/psr-0/
http://www.php-fig.org/psr/psr-1/
http://www.php-fig.org/psr/psr-2/
http://www.php-fig.org/psr/psr-4/