コードスタイルの指定
この仕様は、[PSR-1][] 基本コード仕様の継承および拡張です。
この仕様は、PHP コードを標準化するための一連のルールを策定することにより、さまざまな作成者のコードを参照するときに、さまざまなコーディング スタイルによって引き起こされる不便さを軽減することを目的としています。
複数のプログラマーが複数のプロジェクトで共同作業する場合、共通のコーディング仕様が必要です。 この記事のスタイル仕様は、複数の異なるプロジェクトのコーディング スタイルの共通の特性に基づいています。 したがって、この仕様の価値は私たち全員にあります。それ自体ではなく、このコーディング スタイルに従ってください。
キーワード「しなければならない」(「MUST」)、「してはならない/してはならない」(「MUST NOT」)、「必要」(「必須」)、 「するつもり」(「SHALL」)、「しない」( 「してはならない」)、「すべきである」(「すべきである」)、「すべきではない」(「すべきではない」)、 「推奨する」(「推奨」)、「できる」(「してもよい」)、および「オプション」(" OPTIONAL") については、[RFC 2119][] で詳細に説明されています。
概要
コードは [PSR-1][] のコーディング規約に従わなければなりません。
コードでは、インデントにタブ キーの代わりに 4 つのスペースを使用する必要があります。
1 行あたりの文字数 は、ソフト的に 80 以内に抑える必要があります。理論的には 120 を超えてはなりませんが、 ハード制限を設けてはなりません 。
各名前空間宣言と use 宣言ブロックの後に、空行を挿入する必要があります。
クラスの開き中括弧 ({) は関数宣言の後の独自の行に記述する必要があり、閉じ中括弧 (}) も関数本体の後の独自の行に記述する必要があります。
メソッドの開き中括弧 ({) は関数宣言の後の独自の行に記述する必要があり、閉じ中括弧 (}) も関数本体の後の独自の行に記述する必要があります。
クラスのプロパティとメソッドは、アクセス修飾子(private、protected、public)、abstractとfinalを追加する必要があり、アクセス修飾子の前に宣言する必要があり、staticはアクセス修飾子の後に宣言する必要があります。
制御構造のキーワードの後にはスペースが必要です が、メソッドまたは関数を呼び出すときに があってはなりません 。
コントロール構造の左中括弧 ({) は宣言と同じ行に記述する必要があり、右中括弧 (}) は本文の後の独自の行に 記述する必要があります。
制御構造の左括弧の後と右括弧の前にスペース文字があってはなりません。
1.1. 例
次のサンプル プログラムは、上記の仕様のほとんどを簡単に示しています。 use FooInterface; use OtherVendorOtherPackageBazClass; $b = null) { if ($a === $b) { bar(); } elseif ($a > $b) { $foo-> ;bar($arg1); } else { BazClass::bar($arg2, $arg3); } } Final public static function bar() { // メソッド本体 } }
コードをコピー-
-
一般ルール
2.1 基本的なコーディングガイドライン
コード は、[PSR-1][] のすべての仕様に 準拠する必要があります。
2.2 ドキュメント
すべての PHP ファイル は、行終端文字として Unix LF (改行) を使用する必要があります。
すべての PHP ファイルは 空行で終わる必要があります。
純粋な PHP コード ファイル は最後の ?> 終了タグを省略する必要があります。
2.3. OK
線の長さ に厳密な制限を設けてはなりません 。
ソフトな長さの制約は 120 文字に制限する必要があります 、この長さを超える場合、コード仕様チェックを備えたエディターは警告を発行する必要がありますが、エラー プロンプトを発行してはなりません。
各行は 80 文字を超えてはならず、80 文字を超える行は複数行にする必要があります。
非空白行の後には余分なスペースがあってはなりません。
空白行 を使用すると、 コードが読みやすくなり、コードを分割しやすくなります。
各行に 複数のステートメントを含めることはできません。
2.4. インデント
コードでは、インデントに 4 つのスペースを使用する必要があり、Tab キーを使用してはなりません。
注: インデントにタブ キーの代わりにスペースを使用する利点は、コードの相違点の比較、パッチ適用、コードの再読み込み、およびコメントの際の混乱を回避できることです。 また、位置合わせを容易にするために、インデントにスペースを使用します。
2.5. キーワードと True/False/Null
PHP では、[キーワード][] すべて小文字にする必要があります。
定数 true、false、null も すべて小文字でなければなりません。
名前空間と使用宣言
名前空間宣言の後に空行を挿入する必要があります。
すべての使用は名前空間の後に宣言する必要があります。
各 use ステートメントには use キーワードを 1 つだけ含める必要があります。
use ステートメント ブロックの宣言の後には空行が必要です。
例:
namespace VendorPackage; use FooClass;use BarClass as Bar; use OtherVendorOtherPackageBazClass;// ... 追加の PHP コード ...コピーコード - クラス、プロパティ、メソッド
-
-
- ここでの「クラス」とは、すべてのクラス、インターフェイス、および再利用可能なコード ブロックの特性を指します。
-
4.1. 拡張と継承
- キーワード extends とimplements
- はクラス名と同じ行に記述する必要があります。
-
クラスの開き中括弧 は独自の行を占有する必要があり、閉じ中括弧 はクラス本体の後の独自の行を占有する必要があります。 <? 複数の行に分割することもできます。この場合、継承された各インターフェース名 は、最初の行も含めて別々の行に分割する必要があります。 namespace VendorPackage;FooClassを使用;BarClassをBarとして使用;OtherVendorOtherPackageBazClassを使用;class ClassName extends ParentClass実装 ArrayAccess、Countable、 Serializable { // 定数、プロパティ、メソッド }- コードをコピー
- 4.2.
- 各プロパティにはアクセス修飾子が追加されている必要があります
- 。
-
プロパティを宣言するためにキーワード var を
- 使用してはなりません
- 。
各ステートメントで 複数の属性を定義してはなりません。
プロパティが保護されているかプライベートであるかを区別するために、プレフィックスとしてアンダースコアを使用しないでください。
以下はプロパティ宣言の例です: namespace VendorPackage;class ClassName- {
- public $foo = null;
- }
- メソッドをコピーします。
- すべてのメソッドは
- アクセス修飾子を追加する必要があります。
-
メソッドが保護されているかプライベートであるかを区別するために、プレフィックスとしてアンダースコアを使用しないでください。
-
- メソッド名の後に
- スペースがあってはなりません。左中括弧
- は単独の行になければならず、閉じ中括弧
- はメソッド本体の後に単独の行になければなりません。パラメータの左括弧の後と右括弧の前にスペースを入れてはなりません。
標準メソッド宣言では、括弧、カンマ、スペース、中括弧の位置に注意して、次の例を参照できます。 namespace VendorPackage; class ClassName{ public function fooBarBaz($arg1, &$arg2, $arg3 = []) { // メソッド本体 }} コードをコピー 4.4. メソッドのパラメータ
パラメータリストでは、各カンマの後にスペースが必要であり、カンマの前にスペースがあってはなりません。
デフォルト値を持つパラメータは パラメータリストの最後に配置する必要があります。
namespace VendorPackage; - class ClassName
- {
- public function foo($arg1, &$arg2, $arg3 = [])
- {
- // メソッド本体
- }
- }
-
- コードをコピーします
パラメータリストは複数の行に分割することができます。そのため、最初のパラメータを含む各パラメータは独自の行になければなりません。
パラメータリストを複数の行に分割した後、メソッドの閉じ括弧と開き括弧を同じ行に記述し、中央にスペースで区切る必要があります。 namespace VendorPackage;class ClassName- {
- public function aVeryLongMethodName(
- ClassTypeHint $arg1,
- &$arg2,
- array $arg3 = []
- ) {
- // メソッド本体
- }
- }
- コードをコピー
4.5. 抽象、最終、静的
抽象宣言や最終宣言を追加する必要がある場合は、アクセス修飾子の前に記述し、その後に static を記述する必要があります。 namespace VendorPackage;abstract class ClassName- {
- protected static $foo;
- abstract protected function zim();
- Final public static function bar()
- {
- // メソッドbody
- }
- }
- コードをコピー
4.6. メソッドと関数の呼び出し
メソッドや関数を呼び出す場合、メソッド名または関数名とパラメーターの左括弧の間にスペースがあってはならず、またパラメーターの右括弧の前にスペースがあってはなりません。各パラメーターの前にスペースを入れてはなりません が、後ろにスペースを入れなければなりません 。 bar();$foo->bar($arg1);Foo::bar($arg2, $arg3); コードをコピー - パラメータ
- OK
- このとき、最初のパラメータを含む各パラメータは
別々の行に分割する必要があります。 $foo->bar( $longArgument, $longerArgument, $muchLongerArgument );コードをコピー- 制御構造
-
-
- 制御構造の基本仕様は以下の通りです:
制御構造キーワードの後には スペースが必要です。
左括弧 (.) の後には スペースがあってはなりません
右括弧の前にスペースがあってはなりません)。
右括弧 ) と開始中括弧 { の間には スペースが 1 つ必要です。
構造体の本体は 1 回インデントする必要があります。
閉じ中括弧 } は、構造体の本体の後の別の行に配置する必要があります。
各構造の本体は 必ず中括弧のペアで囲む必要がありますこれにより構造がより構造化され、新しい行を追加する際のエラーの可能性が減ります。
5.1. if、elseif、else
標準の if 構造は次のコードに示すとおりです。大括弧、スペース、中括弧の位置に注意してください。 else と elseif は両方とも前の閉じ中括弧と同じ行にあることに注意してください。
if ($expr1) { // if body } elseif ($expr2) { // elseif body} else { // else body; } Copyコード
では、すべての制御キーワードが 1 つの単語であるように見えるように、他のすべての if の代わりにキーワード elseif を使用する必要があります。 -
5.2. スイッチとケース
- 標準的なスイッチ構造は次のコードのようになります。括弧、スペース、中括弧の位置に注意してください。
- case ステートメント
- は switch に対して相対的にインデントする必要がありますが、break ステートメントと case 内の他のステートメントは case に対して相対的にインデントする必要があります。
- 空ではない case through ステートメントがある場合は、本文に // no Break のようなコメントが必要です。
switch ($expr) { case 0: echo '最初のケース、ブレイクあり'; Break; case 1: echo '2 番目のケース、失敗する'; // ブレークなし case 2: case 3: case 4: echo '3 番目のケース、ブレークの代わりに return'; return; default: echo 'デフォルトのケース'; Break; }- Copyコード
- 5.3. while と do while
標準化された while ステートメントは次のようになります。大括弧、スペース、中括弧の位置に注意してください。 標準的な do while ステートメントも同様に、括弧、スペース、およびスペースに注意してください。花の位置。 - do {
- // 構造体;
- } while ($expr);
コードをコピー 5.4。
記述の基準は以下の通りです。括弧、スペース、中括弧の位置に注意してください。 - for ($i = 0; $i <10; $i++) {
- // 本体
- }
コードをコピー 5.5.
標準の foreach ステートメントは次のとおりです。括弧、スペース、中括弧の位置に注意してください。 - foreach ($iterable as $key => $value) {
- // foreach body
- }
コードをコピー
5.6.
標準の try catch ステートメントは次のとおりです。括弧、スペース、中括弧の位置に注意してください。
-
- try {
- // 本体を試す
- } catch (FirstExceptionType $e) {
- // 本体をキャッチ
- } catch (OtherExceptionType $e) {
- // 本体を試す
- }
コードをコピー
閉鎖
クロージャを宣言する場合、キーワード関数の後とキーワード使用の前後にスペースが必要です。
開き中括弧 は宣言と同じ行に記述する必要があり、閉じ中括弧 は本文の終わりの直後の行に 続ける必要があります。
パラメータリストと変数リストの左括弧の後と右括弧の前にスペースがあってはなりません。
パラメータと変数のリストでは、カンマの前にスペースを入れてはならず、コンマの後にスペースを入れなければなりません。
クロージャ内のデフォルト値を持つパラメータは、リストの最後に配置する必要があります。
標準的なクロージャー宣言ステートメントは次のとおりです。括弧、コンマ、スペース、中括弧の位置に注意してください。
$closureWithArgs = function ($arg1, $arg2) { // body};
$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {- // body
- };
-
-
- コードをコピー
-
-
- パラメータ リストと変数リスト
は複数の行に分割できます。そのため、最初のパラメータや変数を含む各パラメータまたは変数は 独自の行になければなりません , while リストの閉じ中括弧 とクロージャの開き中括弧 は同じ行に配置する必要があります 。
次の例には、パラメーターと変数のリストが複数の行に分割されている複数の状況が含まれています。 $longArgs_noVars = function ( $longArgument, $longerArgument, $muchLongerArgument ) {- // body
- };
-
- $noArgs_longVars = function () use (
- $longバージョン 1 ,
- $longerVar2,
- $muchLongerVar3
- ) {
- // body
- };
-
- $longArgs_longVars = function (
- $longArgument,
- $longerArgument,
- $muchLongerArgument
- ) use (
- $longVar1,
- $longerV) ar2 、
- $ MuchLongervar3 ( $arg) use (
- $longVar1,
- $longerVar2,
- $muchLongerVar3
- ) {
- // body
- };
-
-
- コードをコピー
-
-
- クロージャが関数またはメソッド呼び出しのパラメータとして直接使用される場合、上記のルールは引き続き適用されます。
-
-
-
-
-
- $foo->bar(
- $arg1,
- function ($arg2) use ($var1) {
- // body
- },
- $arg3
- );
-
Copyコード まとめ
上記の仕様には、以下を含む (ただしこれらに限定されない) いくつかの見落としが必然的に含まれます。
グローバル変数と定数の定義
関数の定義
演算子と割り当て
インラインアライメント
コメントとドキュメントブロック
クラス名の接頭辞と接尾辞
ベストプラクティス
この仕様のその後の改訂と拡張により、上記の欠点が補われます。
付録 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、PHP 用オブジェクト体操、http://doc.nette.org/en/coding-standard、http://flow3.typo3.org、https://github.com/propelorm/Propel2/wiki/コーディング標準、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,no,no,no,no,100,?,no,no,no,100,100,?,120,120,no,no,no,no
- class_names,study,study,スタディ、スタディ、スタディ、スタディ、スタディ、スタディ、スタディ、スタディ、下段、スタディ、ロワー、スタディ、スタディ、スタディ、スタディ、スタディ、スタディ、スタディ
- 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,no,no,いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ
- クロージング_php_tag_必須、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、いいえ、はい、いいえ、いいえ、いいえ、いいえ、はい、いいえ、いいえ、いいえ、いいえ、いいえ、はい、いいえ、いいえ
- ラインエンディング、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、いいえ、いいえ、いいえ、いいえ、はい、いいえ、いいえ、いいえ、いいえ、はい、はい、いいえ、いいえ,はい,?,はい,はい,いいえ,はい,いいえ,はい,いいえ
- class_method_control_brace,次/次/同じ、次/次/同じ、次/次/同じ、次/次/同じ、次/次/同じ、同じ/同じ/同じ、次/次/次、同じ/同じ/同じ、同じ/同じ/同じ、同じ/同じ/同じ、同じ/同じ/同じ、次/次/次、次/次/同じ、次/同じ/同じ、次/次/次、次/次/同じ、次/次/同じ、次/次/同じ、次/次/同じ、同じ/同じ/同じ、次/次/同じ、次/次/next
-
コードをコピー
A.2. アンケートの指示
indent_type: インデントの種類。tab = "タブ キーを 1 回使用する"、2 または 4 = "スペースの数"
line_length_limit_soft: 1 行あたりの文字数の「ソフト」制限 ? = 回答なし、または回答なし、いいえは制限がないことを意味します。
line_length_limit_hard: 1 行あたりの文字数の「ハード」制限 ? = 回答なし、または回答なし、no は制限がないことを意味します。
class_names: クラス名の命名。 lower = 小文字のみが許可されます。 lower_under = アンダースコアで区切られた小文字、studly = StudlyCase キャメルケース スタイル。
class_brace_line: クラスの左中括弧は、class キーワードと同じ行にありますか、それとも次の行にありますか?
constant_names: クラスの定数に名前を付けるには? upper = 大文字をアンダースコアで区切ります。
true_false_null: キーワード 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 else または elseif は、前の右中括弧と同じ行にありますか、それとも次の行にありますか?
case_break_indent_from_switch: switch ステートメント内の case と Break は、switch に対して何回インデントする必要がありますか?
function_space_after: 関数呼び出しステートメントで、関数名と変数リストの左括弧の間にスペースがありますか?
クロージング_php_tag_required: 純粋なPHPコードを含むファイルには?>終了タグが必要ですか?
line_endings: どのタイプの行末を選択しますか?
static_or_visibility_first: 静的メソッドを宣言するとき、static はアクセス修飾子の前後に記述する必要がありますか?
control_space_parens: コントロール構造内で、左括弧の後と右括弧の前にスペースがありますか?はい = if ( $expr )、いいえ = if ($expr)。
blank_line_after_php: PHP では開始タグの後に空行が必要ですか?
class_method_control_brace: クラス、メソッド、および制御構造の中括弧の位置統計を開始します。
A.3. アンケート統計結果 TAB: 7 2: 1 4: 14 line_length_limit_soft: - ?: 2
- no: 3
- 75: 4
- 85: 1
- 100 100 : 1
- 12 0:4
- 150: 1
- line_length_limit_hard:
- ?: 2
- no: 11
- 85: 4
- 100: 3
- 120: 2
- class_names:
- ?: 1
- lower: 1
- _under: 下位 1
- スタディ: 19
- class_brace_line:
- 次: 16
- 同じ: 6
- constant_names:
- 上: 22
- true_false_null:
- 下: 19
- 上: 3
- メソッド名:
- キャメル: 21
- 下_下: 1
- メソッドブレース_ライン:
- 次:
- 同じ: 7
- control_brace_line :
- 次: 4
- 同じ: 18
- control_space_after:
- いいえ: 2
- はい: 20
- always_use_control_braces:
- いいえ: 3
- はい: 19
- else_elseif_line:
- 次: 6
- 同じ: 16スイッチ:
- 0/1: 4
- 1/1:4
- 1/2:14
- function_space_after:
- No:22
- closing_php_tag_required:
- no:
- :19 yes:3
- line_endings:
- ?:5
- lf:17
- static_or_ivivibility_first:
- ?:5
- :7°静的:4
- 可視性:6
- CONTROL_SPACE_PARENS:
- ?:1
- いいえ:19号:2
- blank_line_line_after_php:
- ?:1
- No:13
- はい:8
- class_control_brace:
- next/next//次: 4
- 次/次/同じ: 11
- 次/同じ/同じ: 1
- 同じ/同じ/同じ: 6
-
-
-
- コードをコピー
-
-
- Github (PizzaLiu) から転載
-
-
-
PHP、PSR
|