ドキュメント ウェアハウスのアドレス: https://github.com/hfcorriez/fig-standards
中国語版の PSR 仕様
1.1. 例
この例には、上記のルールのいくつかの簡単な表示が含まれています。
class Foo extends Barimplements FooInterface
{
public function sampleFunction($a, $b = null)
{
if ($a === $b) {
bar ();
} elseif ($a > $b) {
$foo->bar($arg1);
} else {
BazClass::bar($arg2, $arg3); }
}
最終的なパブリック静的関数 bar()
{
// メソッド本体
}
}
2. 概要
2.1 基本コード仕様
コードは PSR-1 のすべてのルールに準拠する必要があります。
2.2 ファイル
すべての PHP ファイルは、行終端文字として Unix LF (ライン フィード) を使用する必要があります。
すべての PHP ファイルは空行で終わる必要があります。
純粋な PHP コードのファイル終了タグ?> は省略する必要があります
2.3. 行
行の長さに厳密な制限を設けることはできません。
行の長さのソフト制限は 120 文字である必要があります。自動スタイル チェッカーはソフト制限について警告を発しますが、エラーは表示しません。
行の実際の長さは 80 文字を超えてはならず、長い行は 80 文字以内の後続の行に分割する必要があります。
空白行以外の行の後にはスペースを入れてはいけません。
空白行を使用すると、可読性が向上し、関連するコード ブロックを区別できます。
1 行に複数のステートメントを含めることはできません。
2.4. インデント
コードではインデントに 4 つのスペースを使用する必要があり、タブ文字をインデントとして使用することはできません。
注: タブと混合せずにスペースのみを使用すると、コードの違い、パッチ、履歴、コメントにおける一部の問題を回避できます。ホワイトスペースを使用すると、微妙なインデントを調整して行間の位置を調整することも非常に簡単になります。
2.5. キーワードと True/False/Null
PHP キーワードは小文字である必要があります。
PHP 定数 true、false、null は小文字である必要があります。
3. 名前空間と使用宣言
存在する場合、名前空間宣言の後に空行がなければなりません。
存在する場合は、すべての use ステートメントを namespace ステートメントの下に配置する必要があります。
use キーワードは 1 つの宣言でのみ使用する必要があります。
use 宣言ブロックの後には空行が必要です。
例:
FooClass を使用します。
BarClass を Bar として使用します。
OtherVendor\OtherPackage\BazClass を使用します。
// ... 追加の PHP コード ...
4. クラス、プロパティ、およびメソッド
「クラス」という用語は、すべてのクラス、インターフェイス、および特性 (トレイト) を指します。
4.1. 拡張と継承
クラスの extends およびimplements キーワードは、クラス名と同じ行になければなりません。
クラスの左中括弧はその下の独自の行に配置する必要があり、右中括弧はクラス本体の後の独自の行に配置する必要があります。
class ClassName extends ParentClassimplements \ArrayAccess, \Countable
{
// 定数、プロパティ、メソッド
}
implementsリストは 1 つのインデントで複数の後続の行に分割できます。これを行う場合、リストの最初の項目は次の行に配置する必要があり、1 行にインターフェイスは 1 つだけ存在する必要があります。
FooClass を使用します。
BarClass を Bar として使用します。
OtherVendor\OtherPackage\BazClass を使用します。
class ClassName extends ParentClassimplements
\ArrayAccess,
\Countable,
\Serializable
{
// 定数、プロパティ、メソッド
}
4.2. プロパティ
すべてのプロパティは可視性を宣言する必要があります。
var キーワードを使用して属性を宣言することはできません。
1 つのステートメントで複数の属性を宣言することはできません。
保護された可視性またはプライベートな可視性を示すために、属性名の前に 1 つのアンダースコアを付けることはできません。
プロパティ宣言は次のようになります。
クラス ClassName
{
public $foo = null;
}
4.3. メソッド
すべてのメソッドは可視性を宣言する必要があります。
メソッド名には、保護された可視性またはプライベートな可視性を示すために 1 つのアンダースコアのみを使用しないでください。
メソッド名の宣言の後にスペースを続けることはできません。開き中括弧はメソッド本体の下の独自の行に配置する必要があり、閉じ中括弧はメソッド本体の下の独自の行に配置する必要があります。左括弧の後にスペースを入れたり、右括弧の前にスペースを入れたりしてはいけません。
メソッド定義は次のようになります。括弧、カンマ、スペース、中括弧に注意してください:
class ClassName
{
public function fooBarBaz($arg1, &$arg2, $arg3 = [])
{
// メソッド本体
}
}
4.4. メソッドパラメータ
パラメータリストでは、カンマの前にスペースがあってはならず、カンマの後にはスペースが 1 つ必要です。
メソッド内のデフォルト値を持つパラメータは、パラメータ リストの最後に配置する必要があります。
class ClassName
{
public function foo($arg1, &$arg2, $arg3 = [])
{
// メソッド本体
}
}
パラメータ リストは、1 つのインデントで後続の複数の行に分割できます。これを行う場合、リストの最初の項目を次の行に配置し、各行にパラメータを 1 つだけ配置する必要があります。
パラメータ リストが複数行に分かれている場合、右括弧と左中括弧はスペースを入れて 1 行に配置する必要があります。
class ClassName
{
public function aVeryLongMethodName(
ClassTypeHint $arg1,
&$arg2,
array $arg3 = []
) {
// メソッド本文
}
}
4.5. abstract、final、static
存在する場合、abstract 宣言とfinal 宣言は可視性宣言の前に配置する必要があります。
存在する場合、静的宣言の後に可視性宣言を続ける必要があります。
抽象クラス ClassName
{
protected static $foo;
抽象保護関数 zim();
最終的なパブリック静的関数 bar()
{
// メソッド本体
}
}
4.6. メソッドと関数の呼び出し
メソッドまたは関数を呼び出すには、メソッドまたは関数名と左括弧の間にスペース、左括弧の後にスペース、右括弧の前にスペースがあってはなりません。関数リストでは、カンマの前にスペースがあってはならず、カンマの後にスペースが 1 つ必要です。
bar();
$foo->bar($arg1);
Foo::bar($arg2, $arg3);
パラメータリストは次のように分割できます。続く複数の行にはインデントが含まれています。これを行う場合、リストの最初の項目を次の行に配置し、各行に引数を 1 つだけ指定する必要があります。
5. コントロール構造
コントロール構造のスタイル ルールは次のように要約されます。
制御構造キーワードの後にはスペースが必要です
左括弧の後にはスペースがあってはなりません
右括弧の前にはスペースがあってはなりません
右括弧とキーワードの間にはスペースが必要です左中括弧
コード 本体は 1 回インデントする必要があります
右中括弧は本体の 1 行下にある必要があります
各構造の本体は中括弧で囲む必要があります。この構造はより標準化されているように見え、新しい行を追加するときにエラーが発生する可能性が低くなります。
5.1. if、elseif、else
if 構造は次のようになります。括弧、スペース、および中括弧の配置に注意してください。また、else と elseif は、前の本体の閉じ中括弧と同じ行上にあります。
すべての制御キーワードを 1 つの単語として保持するには、else if の代わりにキーワード elseif を使用する必要があります。
5.2. スイッチ、ケース
スイッチ構造は次のようになります。括弧、スペース、中括弧に注意してください。 case ステートメントはスイッチからインデントする必要があり、break キーワード (または他の Break キーワード) はケース本体と同じレベルでインデントする必要があります。空ではないケース本体が落ちた場合は、// no Break のようなコメントが必要です。
5.4. for
for ステートメントは次のようになります。括弧、スペース、中括弧の配置に注意してください。
5.5. foreach
foreach ステートメントは次のようになります。括弧、スペース、中括弧の配置に注意してください。
6. 締めくくり
クロージャは、宣言時に関数キーワードの後にスペースが必要で、使用前にはスペースが必要です。
開き中括弧は同じ行になければならず、閉じ中括弧は本文の次の行になければなりません。
パラメータ リストと変数リストの左括弧の後にスペースを入れたり、閉じ括弧の前にスペースを入れたりしてはいけません。
パラメータリストと変数リストでは、カンマの前にスペースがあってはならず、カンマの後にスペースがなければなりません。
デフォルト値を持つクロージャのパラメータは、パラメータ リストの後に配置する必要があります。
クロージャ宣言は次のようになります。括弧、スペース、中括弧の配置に注意してください。
パラメータと変数のリストは、1 つのインデントで複数の後続の行に分割できます。これを行う場合、リストの最初の項目を次の行に配置し、1 行にパラメータまたは変数を 1 つだけ配置する必要があります。
最後のリスト (パラメーターまたは変数) が複数の行に分割されている場合、閉じ括弧と開き中括弧は、間にスペースを入れてそれぞれの行に配置する必要があります。
以下は、複数行に分割されたパラメータと変数リストの例です。
$noArgs_longVars = function () use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// 本体
};
$longArgs_longVars = 関数 (
$longArgument,
$longerArgument,
$muchLongerArgument
) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) > >) {
// 本文
};
$longArgs_shortVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use ($var1) {
// body
};
$shortArgs_longVars = 関数 ($arg) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
クロージャが関数またはメソッドのパラメータとして呼び出される場合、上記の書式設定ルールも適用されることに注意してください。
7. 結論
このガイドには意図的に省略されているスタイル要素や実践が数多くあります。これらには以下が含まれますが、これらに限定されません。
グローバル変数とグローバル定数の宣言
メソッド宣言
演算子と代入
行間の配置
コメントとドキュメントのブロック
クラス名にはプレフィックスとサフィックスが付けられます
ベストプラクティス
将来の提案では、これらまたは他のスタイル要素や実践に合わせてこのガイドを修正および拡張する可能性があります。
付録 A アンケート
このスタイル ガイドを作成するために、プロジェクトのアンケートを使用して一般的な慣行を特定しました。アンケートはここにあり、他の人も閲覧できます。
A.1.调查データベース
url,http://www.horde.org/apps/horde/docs/CODING_STANDARDS,http://pear.php.net/manual/en/standards.php,http://solarphp.com /manual/appendix-standards.style,http://framework.zend.com/manual/en/coding-standard.html,http://symfony.com/doc/2.0/contributing/code/standards.html,http ://www.ppi.io/docs/coding-standards.html、https://github.com/ezsystems/ezp-next/wiki/codingstandards、http://book.cakephp.org/2.0/en/contributing /cakephp-coding-conventions.html、https://github.com/UnionOfRAD/lithium/wiki/Spec:-Coding、http://drupal.org/coding-standards、http://code.google.com/ p/sabredav/,http://area51.phpbb.com/docs/31x/coding-guidelines.html,https://docs.google.com/a/zikula.org/document/edit?authkey=CPCU0Us&hgd=1&id =1fcqb93Sn-hR9c0mkN6m_tyWnmEvoswKBtSc0tKkZmJA,http://www.chisimba.com,n/a,https://github.com/Respect/project-info/blob/master/coding-standards-sample.php,n/a,Object PHP の体操、http://doc.nette.org/en/coding-standard、http://flow3.typo3.org、https://github.com/propelorm/Propel2/wiki/Coding-Standards、http: //developer.joomla.org/coding-standards.html
投票、はい、はい、はい、はい、はい、はい、はい、はい、はい、はい、はい、はい、はい、はい、いいえ、いいえ、いいえ、?、はい、いいえ、はいindent_type,4,4,4,4,4,tab,4,tab,tab,2,4,tab,4,4,4,4,4,4,tab,tab,4,tab
line_length_limit_soft,75,75,75,75,no,85,120,120,80,80,80,no,100,80,80,?,?,120,80,120,no,150
line_length_limit_hard,85,85,85, 85,いいえ,いいえ,いいえ,いいえ,100,?,いいえ,いいえ,いいえ,100,100,?,120,120,いいえ,いいえ,いいえ,いいえ
クラス名,勉強中,勉強中,勉強中,勉強中,勉強中,勉強中,スタディ、スタディ、スタディ、スタディ、スタディ、ロワーアンダー、スタディ、ロワー、スタディ、スタディ、スタディ、スタディ、?、スタディ、スタディ、スタディ
class_brace_line、次、次、次、次、次、同じ、次、同じ、同じ、同じ、同じ、次、次、次、次、次、次、次、次、同じ、次、次
定数名、上、上、上、上、上、上、上、上、上,上,上,上,上,上,上,上,上,上,上,上,上,上
true_false_null,下,下,下,下,下,下,下,下,下,上,下,下,下,上,下,下,下,下,下,上,下,下
メソッド名,ラクダ,ラクダ,ラクダ,ラクダ,ラクダ,ラクダ,ラクダ,ラクダ,ラクダ,ラクダ,キャメル、下段、キャメル、キャメル、キャメル、キャメル、キャメル、キャメル、キャメル、キャメル、キャメル、キャメル
method_brace_line、次、次、次、次、次、同じ、次、同じ、同じ、同じ、同じ、次、次、同じ、次、次、次、次、次、同じ、次、次
control_brace_line、同じ、同じ、同じ、同じ、同じ、同じ、次、同じ、同じ、同じ、同じ、次、同じ、同じ、次、同じ、同じ、同じ、同じ、同じ、同じ、次
control_space_after、はい、はい、はい、はい、はい、いいえ、はい、はい、はい、はい、いいえ、はい、はい、はい、はい、はい、はい、はい、はい、はい、はい、はい
always_use_control_braces、はい、はい、はい、はい、はい、はい、いいえ、はい、はい、はい、いいえ、はい、はい、はい、はい、いいえ、はい、はい、はい、はい、はい、はい
else_elseif_line、同じ、同じ、同じ、同じ、同じ、同じ、次、同じ、同じ、次、同じ、次、同じ、次、次、同じ、同じ、同じ、同じ、同じ、同じ、次
case_break_indent_from_switch,0/1,0/1,0/1,1/2,1/2,1/2,1/2,1/1, 1/1、1/2、1/2、1/1、1/2、1/2、1/2、1/2、1/2、1/2、0/1、1/1、1/ 2,1/2
function_space_after,いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ
closed_php_tag_required、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、はい、いいえ、いいえ、いいえ、いいえ、はい、いいえ、いいえ、いいえ、いいえ、はい、いいえ、いいえ
行末,LF,LF,LF,LF,LF,LF,LF,LF,?,LF,?,LF,LF,LF,LF,?,,LF,?,LF,LF,LF
static_or_visibility_first,static,?,static,どちらか,どちらか,どちらか,可視性,可視性,可視性,どちらか,静的,どちらか,?,可視性,?,?,どちらか,どちらか,可視性,可視性,静的,?
control_space_parens 、いいえ、いいえ、いいえ、いいえ、いいえ、はい、いいえ、いいえ、いいえ、いいえ、いいえ、はい、?、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ
blank_line_after_php,no ,いいえ、いいえ、いいえ、はい、いいえ、いいえ、いいえ、いいえ、はい、はい、いいえ、いいえ、はい、?、はい、はい、いいえ、はい、いいえ、はい、いいえ
class_method_control_brace,next/next /同じ、次/次/同じ、次/次/同じ、次/次/同じ、次/同じ、同じ/同じ/同じ、次/次/次、同じ/同じ/同じ、同じ/同じ/同じ、同じ/同じ/同じ、同じ/同じ/同じ、次/次/次、次/次/同じ、次/同じ/同じ、次/次/次、次/次/同じ、次/次/同じ、次/次/同じ、次/次/同じ、同じ/同じ/同じ、次/次/同じ、次/次/次
A.2.
indent_type: 縮小タイプを説明します。tab = "タブ文字を使用"、2 または 4 = "スペースの数"
line_length_limit_soft: 行の長さ (文字数) の「ソフト」制限。 ? = は「いいえ」を意味するものではなく、「いいえ」という数字は制限がないことを意味するものではありません。
line_length_limit_hard: 行の長さ (文字数) の「ハード」制限。 ? = は意味や数値ではなく、no は制限がないことを意味します。
class_names: クラス名に名前を付ける方法 lower = 小文字のみ、 lower_under = 小文字と下線、studly = ラクダ型。
class_brace_line: クラスの左中括弧は同じ行に配置する必要がありますか、それとも次の行に配置する必要がありますか?
constant_names: クラス定数に名前を付けるにはどうすればよいですか? upper = 大文字と下線の区切り文字。
true_false_null: すべて文字ですか、それともすべて大文字ですか?
method_names: メソッド名に名前を付けるにはどうすればよいですか? Camel = キャメルケース、 lower_under = 小文字と下線区切り文字。
method_brace_line: メソッドの左中括弧は同じ行にありますか、それとも次の行にありますか?
control_brace_line: 制御構造の左中括弧は同じ行にありますか、それとも次の行にありますか?
control_space_after: 制御構造キーワードの後にスペースはありますか?
always_use_control_braces: 制御構造には常に中括弧を使用しますか?
else_elseif_line: else と elseif を使用する場合、それらは同じ行に配置する必要がありますか、それとも次の行に配置する必要がありますか?
case_break_indent_from_switch: case と Break は switch ステートメントから何回インデントされますか?
function_space_after: 関数名と関数呼び出しの左括弧にスペースはありますか?
closed_php_tag_required: 純粋な PHP ファイルの場合、タグを閉じる必要がありますか?>?
line_endings: どのような行末が使用されますか?
static_or_visibility_first: メソッドを定義するとき、静的と可視性のどちらが先に来ますか?
control_space_parens: 制御構造式で、左括弧の後と右括弧の前にスペースがありますか?はい = if ( $expr )、いいえ = if ($expr)。
blank_line_after_php: PHP 開始タグの後に空行は必要ですか?
class_method_control_brace: クラス、メソッド、および制御構造内の左中括弧の位置。
A.3.调查結果
indent_type:
tab: 7
2: 1
4: 14
line_length_limit_soft:
?: 2
no: 3
75: 4
> 80: 6
85: 1
100: 1
120: 4
150: 1
line_length_limit_hard:
?: 2
no: 11
85: 4
100: 3
120: 2
クラス名:
? ?: 1
下位: 1
下位アンダー: 1
スタディ: 19
クラスブレースライン:
次: 16
同じ: 6
定数名:
上位: 22
true_false_null:
下位: 19
上位: 3
メソッド名:
キャメル: 21
lower_under: 1
method_brace_line:
次: 15
同じ: 7
control_brace_line:
次: 4
同じ: 18
control_space_after:
no: 2 はい: 20
always_use_control_braces:
いいえ: 3
はい: 19
else_elseif_line:
次: 6
同じ: 16
case_break_indent_from_switch:
0/1 : 4
1/1: 4
1/2: 14
function_space_after:
no: 22
closed_php_tag_required:
no: 19
yes: 3
line_endings :
?: 5
LF: 17
static_or_visibility_first:
?: 5
いずれか: 7
static: 4
Visibility: 6
control_space_parens:
?: 1
いいえ: 19
はい: 2
blank_line_after_php:
?: 1
いいえ: 13
はい: 8
class_method_control_brace:
next/next/次: 4
次/次/同じ: 11
次/同じ/同じ: 1
同じ/同じ/同じ: 6