ドキュメント倉庫アドレス: https://github.com/hfcorriez/fig-standards
PSR仕様中国語版
1.1. 例
この例には、上記のルールのいくつかの簡単な表示が含まれています。
b){
final public static function bar()
{
// メソッド本体
}
}
2. まとめ
2.1 基本的なコード仕様
コードは PSR-1 のすべてのルールに準拠する必要があります。
2.2 ファイル
すべての PHP ファイルは、行終端文字として Unix LF (改行) を使用する必要があります。
すべての PHP ファイルは空行で終わる必要があります。
純粋な PHP コードのファイル終了タグ?>省略する必要があります
2.3. ライン
ラインの長さに厳密な制限を設けることはできません。
行の長さのソフト制限は 120 文字である必要があります。ソフト制限については、自動スタイル チェッカーは警告を出しますが、エラーは表示しません。
1 行の実際の長さは 80 文字を超えてはなりません。長い行は 80 文字以内の複数の行に分割する必要があります。
空白行以外の行の後にはスペースがあってはなりません。
空白行は読みやすさを向上させ、コードの関連ブロックを区別するために使用できます。
1 行に複数のステートメントを含めることはできません。
2.4. インデント
コードではインデントに 4 つのスペースを使用する必要があり、タブ文字はインデントとして使用できません。
注: タブと混合せずにスペースのみを使用すると、コードの違い、パッチ、履歴、コメントにおけるいくつかの問題を回避できます。ホワイトスペースを使用すると、微妙なインデントを調整して行間の位置を調整することも非常に簡単になります。
2.5. キーワードと True/False/Null
PHP キーワードは小文字である必要があります。
PHP 定数 true、false、null は小文字である必要があります。
3. 名前空間と Use の宣言
存在する場合は、名前空間宣言の後に空行が必要です。
use ステートメントが存在する場合は、すべての use ステートメントを名前空間ステートメントの下に配置する必要があります。
use キーワードは 1 つの宣言でのみ使用する必要があります。
use 宣言ブロックの後には空行が必要です。
例:
FooClass を使用します;
BarClass を Bar として使用します;
OtherVendorOtherPackageBazClass を使用します;
// ... 追加の PHP コード ...
4. クラス、プロパティ、およびメソッド
「クラス」という用語は、すべてのクラス、インターフェイス、および特性を指します。
4.1. 拡張と継承
クラスの extends およびimplements キーワードはクラス名と同じ行になければなりません。
クラスの左中括弧はその下の独自の行に配置する必要があり、右中括弧はクラス本体の後の独自の行に配置する必要があります。
class ClassName extends ParentClassimplements ArrayAccess, Countable
{
// 定数、プロパティ、メソッド
}
リストを 1 つのインデントで複数の後続の行に分割できるように実装します。これを行う場合、リストの最初の項目は次の行に配置する必要があり、1 行にインターフェイスは 1 つだけ存在する必要があります。
FooClass を使用します;
BarClass を Bar として使用します;
OtherVendorOtherPackageBazClass を使用します;
class ClassName extends ParentClassimplements
ArrayAccess,
Countable,
Serializable
{
// // 定数、プロパティ、メソッド
}
4.2. プロパティ
すべてのプロパティは可視性を宣言する必要があります。
var キーワードを使用して属性を宣言することはできません。
1 つのステートメントで複数の属性を宣言することはできません。
保護された可視性またはプライベートな可視性を示すために、プロパティ名の前に 1 つのアンダースコアを付けることはできません。
プロパティ宣言は次のようになります。
class ClassName
{
public $foo = null;
}
4.3. メソッド
すべてのメソッドは可視性を宣言する必要があります。
メソッド名では、保護された可視性またはプライベートな可視性を示すために 1 つのアンダースコアのみを使用しないでください。
メソッド名の宣言の後にスペースを続けることはできません。開き中括弧はメソッド本体の下の独自の行に配置する必要があり、閉じ中括弧はメソッド本体の下の独自の行に配置する必要があります。左括弧の後にスペースを入れたり、右括弧の前にスペースを入れたりしてはいけません。
メソッド定義は次のようになります。 大括弧、コンマ、スペース、中括弧に注意してください:
{
public function foobarbaz($ arg1、&$ arg2、$ arg3 = [])
4.4. メソッドパラメータ
パラメータリストでは、カンマの前にスペースを入れてはならず、カンマの後にはスペースを 1 つ入れる必要があります。
メソッド内のデフォルト値を持つパラメータは、パラメータリストの最後に配置する必要があります。
{
public function foo($ arg1、&$ arg2、$ arg3 = [])
パラメータリストは、1 つのインデントで複数の後続の行に分割できます。これを行う場合、リストの最初の項目を次の行に配置し、各行にパラメータを 1 つだけ配置する必要があります。
パラメータリストが複数行に分かれている場合、右括弧と左中括弧はスペースを入れて配置し、それぞれの行を形成する必要があります。
コードをコピーします
コードは次のとおりです:
}
4.5. abstract、final、static
存在する場合、abstract 宣言と Final 宣言は可視性宣言の前に配置する必要があります。
存在する場合、静的宣言の後に可視性宣言を続ける必要があります。
コードは次のとおりです:
}
}
4.6. メソッドと関数の呼び出し
メソッドまたは関数を呼び出すには、メソッドまたは関数名と左括弧の間にスペース、左括弧の後にスペース、右括弧の前にスペースを入れてはいけません。関数リストでは、カンマの前にスペースがあってはならず、カンマの後にスペースが 1 つ必要です。
bar();
$foo->bar($arg1);
Foo::bar($arg2, $arg3);
コードを次のようにコピーします:
& lt ;? PHP
$ foo-& gt; bar (
$longargument,
$longargument,
コードをコピー
コードは次のとおりです:
if ($expr1) {
} elseif ($expr2) {
// elseif body} else {
// else body;}
5.4. for
for ステートメントは次のようになります。括弧、スペース、中括弧の配置に注意してください。
5.5.foreach
foreach ステートメントは以下のようになります。括弧、スペース、中括弧の配置に注意してください。
6. 締めくくり
クロージャを宣言するときは function キーワードの後にスペースが必要です。また、使用前にもスペースが必要です。
左中括弧は同じ行になければならず、右中括弧は本文の次の行になければなりません。
パラメータリストと変数リストの左括弧の後にスペースがあってはならず、パラメータリストと変数リストの右括弧の前にスペースがあってはなりません。
パラメータリストと変数リストでは、カンマの前にスペースがあってはならず、カンマの後にスペースがなければなりません。
デフォルト値を持つクロージャのパラメータはパラメータリストの後に配置する必要があります。
クロージャ宣言は次のようになります。括弧、スペース、中括弧の配置に注意してください。
パラメータと変数のリストは、1 つのインデントで複数の後続の行に分割できます。これを行う場合は、リストの最初の項目を次の行に配置し、1 行にパラメータまたは変数を 1 つだけ配置する必要があります。
最終的なリスト (パラメーターまたは変数) が複数の行に分割されている場合は、右括弧と左中括弧をスペースと一緒に配置して独自の行を形成する必要があります。
以下は、複数行に分割されたパラメータと変数リストの例です。
$noArgs_longVars = function () use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
$longArgs_longVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use (
$longVar1,
$longerVar2,
$muchLongerVar3
) {
// body
};
$longArgs_shortVars = function (
$longArgument,
$longerArgument,
$muchLongerArgument
) use ($var1) {
// body
};
$shortArgs_longVars = function ($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%3A-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 Calisthenics for 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
voting,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,no,no,no,?,yes,no,yes
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,no,no,no,no,100,?,no,no,no,100,100,?,120,120,no,no,no,no
class_names,studly,studly,studly,studly,studly,studly,studly,studly,studly,studly,studly,lower_under,studly,lower,studly,studly,studly,studly,?,studly,studly,studly
class_brace_line,next,next,next,next,next,same,next,same,same,same,same,next,next,next,next,next,next,next,next,same,next,next
constant_names,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper
true_false_null,lower,lower,lower,lower,lower,lower,lower,lower,lower,upper,lower,lower,lower,upper,lower,lower,lower,lower,lower,upper,lower,lower
method_names,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel,lower_under,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel
method_brace_line,next,next,next,next,next,same,next,same,same,same,same,next,next,same,next,next,next,next,next,same,next,next
control_brace_line,same,same,same,same,same,same,next,same,same,same,same,next,same,same,next,same,same,same,same,same,same,next
control_space_after,yes,yes,yes,yes,yes,no,yes,yes,yes,yes,no,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes
always_use_control_braces,yes,yes,yes,yes,yes,yes,no,yes,yes,yes,no,yes,yes,yes,yes,no,yes,yes,yes,yes,yes,yes
else_elseif_line,same,same,same,same,same,same,next,same,same,next,same,next,same,next,next,same,same,same,same,same,same,next
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,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no
closing_php_tag_required,no,no,no,no,no,no,no,no,yes,no,no,no,no,yes,no,no,no,no,no,yes,no,no
line_endings,LF,LF,LF,LF,LF,LF,LF,LF,?,LF,?,LF,LF,LF,LF,?,,LF,?,LF,LF,LF
static_or_visibility_first,static,?,static,either,either,either,visibility,visibility,visibility,either,static,either,?,visibility,?,?,either,either,visibility,visibility,static,?
control_space_parens,no,no,no,no,no,no,yes,no,no,no,no,no,no,yes,?,no,no,no,no,no,no,no
blank_line_after_php,no,no,no,no,yes,no,no,no,no,yes,yes,no,no,yes,?,yes,yes,no,yes,no,yes,no
class_method_control_brace,next/next/same,next/next/same,next/next/same,next/next/same,next/next/same,same/same/same,next/next/next,same/same/same,same/same/same,same/same/same,same/same/same,next/next/next,next/next/same,next/same/same,next/next/next,next/next/same,next/next/same,next/next/same,next/next/same,same/same/same,next/next/same,next/next/next
A.2. 调查说明
indent_type: 缩进类型。 tab = "使用制表符",2 or 4 = "空格数量"
line_length_limit_soft: 行长度的“软”限制,用字符。 ? = 不表示或者数字 no 意为不限制.
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: switch ステートメントから case と Break が何回インデントされているか?
function_space_after: 関数名と関数呼び出しの左括弧にスペースはありますか?
クロージング_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。 120: 4
150: 1
line_length_limit_hard:
?: 2
no: 11
85: 4
100: 3
120: 2
class_names:
?: 1
lower: 1
lower_under: 1
19
class_brace_line:
次:16
同じ:6
constant_names:
上:22
true_false_null:
下:19
上:3
method_names:
キャメル:21
下位:1
method_brace_line:
次:15
同:7
control_brace_line:
次: 4
同じ: 18
control_space_after:
いいえ: 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
クロージング_php_tag_required:
no: 19
yes: 3
line_endings:
?: 5
LF: 17
static_or_visibility_first:
? : 5
いずれか: 7
static: 4
可視性: 6
control_space_parens:
?: 1
no: 19
Yes: 2
blank_line_after_php:
?: 1
no: 13
Yes: 8
class_method_control_brace:
next/next /次: 4
次/次/同じ: 11
次/同じ/同じ: 1
同じ/同じ/同じ: 6
http://www.bkjia.com/PHPjc/313547.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/313547.html
文書倉庫アドレス: https://github.com/hfcorriez/fig-standards PSR 仕様 中国語版 PSR-0 が自動的にロード PSR-1 基本コード仕様 PSR-2 コード スタイル PSR-3 ログ インターフェイス 仕様の抜粋が翻訳されているのはなぜですか。 .