ホームページ  >  記事  >  バックエンド開発  >  PHP の PSR-2 コーディング スタイル仕様 (コード) の詳細な紹介

PHP の PSR-2 コーディング スタイル仕様 (コード) の詳細な紹介

不言
不言転載
2019-04-01 10:15:101839ブラウズ

この記事は、PHP の PSR-2 コーディング スタイル仕様に関する詳細な紹介 (コード) を提供します。これには一定の参考価値があります。必要な友人は参照できます。お役に立てれば幸いです。

次は、PSR-1 の基本コード仕様を継承および拡張した PSR-2 コーディング スタイル仕様です。

PSR-1 と PSR-2 は、PHP 開発における基本的なコーディング標準です。実際、誰もが参照し、そこから学ぶことができます。すべての開発者は、自分がよく知っている独自の開発標準セットを持っていますが、やはり「業界標準に従ってコードを書いてください。標準は検証済みです。」だと思います。 PHP 開発者の参考になれば幸いです。

1. 概要

コードは、[PSR-1]() のコーディング仕様に従う必要があります。

コードは、「Tab キー」の代わりに 4 つのスペースを使用してインデントする必要があります。

1 行あたりの文字数は、ソフト的に 80 以内に抑える必要があります。理論的には 120 を超えてはなりませんが、ハード制限があってはなりません。

各名前空間宣言ステートメントと use 宣言ブロックの後に空行を挿入する必要があります。

クラスの左中括弧 ({) はクラス宣言の後の独自の行に記述する必要があり、閉じ中括弧 (}) もクラス本体の後の独自の行に記述する必要があります。

メソッドの左中括弧 ({) は関数宣言の後の独自の行に記述する必要があり、右中括弧 (}) も関数本体の後の独自の行に記述する必要があります。

クラスのプロパティとメソッドにはアクセス修飾子 (private、protected、public) を追加する必要があり、abstract と Final はアクセス修飾子の前に宣言する必要があり、static はアクセス修飾子の後に宣言する必要があります。

制御構造体のキーワードの後に​​はスペースが必要ですが、メソッドまたは関数を呼び出すときはスペースを入れてはいけません。

制御構造体の左中括弧 ({) は宣言と同じ行に記述し、右中括弧 (}) は本文の後の独自の行に記述する必要があります。

制御構造の左括弧の後ろと右括弧の前にスペースがあってはなりません。

1.1. 例

次のサンプル プログラムは、上記の仕様の大部分を簡単に示しています:

<?php
namespace Vendor\Package;
use FooInterface;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class Foo extends Bar implements FooInterface
{
 public function sampleFunction($a, $b = null)
 {
 if ($a === $b) {
 bar();
 } elseif ($a > $b) {
 $foo->bar($arg1);
 } else {
 BazClass::bar($arg2, $arg3);
 }
 }
 final public static function bar()
 {
 // 方法的内容
 }
}

2. 一般規則

##2.1 基本的なコーディング ガイドライン

コードは、[PSR-1]() のすべての仕様に準拠する必要があります。

2.2 ファイル

すべての PHP ファイルは、行終端文字として Unix LF (改行) を使用する必要があります。

すべての PHP ファイルは空行で終わる必要があります。

純粋な PHP コード ファイルでは、最後の ?> 終了タグを省略する必要があります。

2.3. 行

の長さには、厳密な制限を設けてはいけません。

ソフトな長さの制約は 120 文字に制限する必要があります。この長さを超えた場合、コード仕様チェックを備えたエディタは警告を発行する必要がありますが、エラー プロンプトを発行してはなりません。

各行は 80 文字を超えてはならず、80 文字を超える行は複数の行に折りたたむ必要があります。

空行以外の行の後には余分なスペースがあってはなりません。

空白行はコードを読みやすくし、コードをブロックするのに役立ちます。

各行に複数のステートメントを含めることはできません。

2.4. インデント

コードではインデントに 4 つのスペースを使用する必要があり、Tab キーを使用してはなりません。

注: 「タブ インデント」の代わりにスペースを使用する利点は、

コードの相違点の比較、パッチの適用、コードの再読み込み、およびコメントの際の混乱を回避できることです。

また、整列を容易にするために、インデントにスペースを使用します。

2.5. キーワードと True/False/Null

PHP キーワードはすべて小文字である必要があります。

定数 true、false、null もすべて小文字である必要があります。

3. 名前空間と使用宣言

名前空間宣言の後に空行を挿入する必要があります。

すべての使用は名前空間の後に宣言する必要があります。

各 use ステートメントには use キーワードを 1 つだけ含める必要があります。

use ステートメントブロックを宣言した後には空行が必要です。

例:

<?php

namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

4. クラス、プロパティ、およびメソッド

ここでの「クラス」は、すべての「クラス クラス」、「インターフェイス」を指します。 " および "特性の再利用可能なコード ブロック"。

4.1. 拡張と継承

キーワード extends とimplements はクラス名の同じ行に記述する必要があります。

クラスの開始中括弧は独自の行を占有する必要があり、閉じ中括弧もクラス本体の後の独自の行を占有する必要があります。

<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements \ArrayAccess, \Countable
{
 // 这里面是常量、属性、类方法
}

implements の継承リストは複数の行に分割することもできます。その場合、継承された各インターフェイス名は、最初のインターフェイス名も含め、それぞれ別の行に存在する必要があります。

<?php

namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements
 \ArrayAccess,
 \Countable,
 \Serializable
{
 // 这里面是常量、属性、类方法
}

4.2. 属性

すべての属性にはアクセス修飾子を追加する必要があります。

属性の宣言にキーワード var を使用しないでください。

每条语句 一定不可 定义超过一个属性。

不该 使用下划线作为前缀,来区分属性是 protected 或 private。

以下是属性声明的一个范例:

<?php
namespace Vendor\Package;
class ClassName
{
 public $foo = null;
}

4.3方法

所有方法都 必须 添加访问修饰符。

不该 使用下划线作为前缀,来区分方法是 protected 或 private。

方法名称后 一定不可 有空格符,其开始花括号 必须 独占一行,结束花括号也 必须 在方法主体后单独成一行。参数左括号后和右括号前 一定不可 有空格。

一个标准的方法声明可参照以下范例,留意其括号、逗号、空格以及花括号的位置。

<?php
namespace Vendor\Package;
class ClassName
{
 public function fooBarBaz($arg1, &$arg2, $arg3 = [])
 {
 // method body
 }
}

4.4. 方法的参数

参数列表中,每个逗号后面 必须 要有一个空格,而逗号前面 一定不可 有空格。

有默认值的参数,必须 放到参数列表的末尾。

<?php
namespace Vendor\Package;
class ClassName
{
 public function foo($arg1, &$arg2, $arg3 = [])
 {
 // method body
 }
}

参数列表 可以 分列成多行,这样,包括第一个参数在内的每个参数都 必须 单独成行。

拆分成多行的参数列表后,结束括号以及方法开始花括号 必须 写在同一行,中间用一个空格分隔。

<?php
namespace Vendor\Package;
class ClassName
{
 public function aVeryLongMethodName(
 ClassTypeHint $arg1,
 &$arg2,
 array $arg3 = []
 ) {
 // 方法的内容
 }
}

4.5. abstract 、 final 、 以及 static

需要添加 abstract 或 final 声明时,必须 写在访问修饰符前,而 static 则 必须 写在其后。

<?php
namespace Vendor\Package;
abstract class ClassName
{
 protected static $foo;
 abstract protected function zim();
 final public static function bar()
 {
 // method body
 }
}

4.6. 方法及函数调用

方法及函数调用时,方法名或函数名与参数左括号之间 一定不可 有空格,参数右括号前也 一定不可 有空格。每个参数前 一定不可 有空格,但其后 必须 有一个空格。

<?php
bar();
$foo->bar($arg1);
Foo::bar($arg2, $arg3);
参数 可以 分列成多行,此时包括第一个参数在内的每个参数都 必须 单独成行。
<?php
$foo->bar(
 $longArgument,
 $longerArgument,
 $muchLongerArgument
);

5. 控制结构

控制结构的基本规范如下:

  • 控制结构关键词后 必须 有一个空格。
  • 左括号 ( 后 一定不可 有空格。
  • 右括号 ) 前也 一定不可 有空格。
  • 右括号 ) 与开始花括号 { 间 必须 有一个空格。
  • 结构体主体 必须 要有一次缩进。
  • 结束花括号 } 必须 在结构体主体后单独成行。

每个结构体的主体都 必须 被包含在成对的花括号之中,

这能让结构体更加结构话,以及减少加入新行时,出错的可能性。

5.1. if 、elseif 和 else

标准的 if 结构如下代码所示,请留意「括号」、「空格」以及「花括号」的位置,

注意 else 和 elseif 都与前面的结束花括号在同一行。

<?php
if ($expr1) {
 // if body
} elseif ($expr2) {
 // elseif body
} else {
 // else body;
}

应该 使用关键词 elseif 代替所有 else if ,以使得所有的控制关键字都像是单独的一个词。

5.2. switch 和 case

标准的 switch 结构如下代码所示,留意括号、空格以及花括号的位置。

case 语句 必须 相对 switch 进行一次缩进,而 break 语句以及 case 内的其它语句都 必须 相对 case进行一次缩进。

如果存在非空的 case 直穿语句,主体里 必须 有类似 // no break 的注释。

<?php
switch ($expr) {
 case 0:
 echo &#39;First case, with a break&#39;;
 break;
 case 1:
 echo &#39;Second case, which falls through&#39;;
 // no break
 case 2:
 case 3:
 case 4:
 echo &#39;Third case, return instead of break&#39;;
 return;
 default:
 echo &#39;Default case&#39;;
 break;
}

5.3. while 和 do while

一个规范的 while 语句应该如下所示,注意其「括号」、「空格」以及「花括号」的位置。

<?php
while ($expr) {
 // structure body
}

标准的 do while 语句如下所示,同样的,注意其「括号」、「空格」以及「花括号」的位置。

<?php
do {
 // structure body;
} while ($expr);

5.4. for

标准的 for 语句如下所示,注意其「括号」、「空格」以及「花括号」的位置。

<?php
for ($i = 0; $i < 10; $i++) {
 // for body
}

5.5. foreach

标准的 foreach 语句如下所示,注意其「括号」、「空格」以及「花括号」的位置。

<?php
foreach ($iterable as $key => $value) {
 // foreach body
}

5.6. try, catch

标准的 try catch 语句如下所示,注意其「括号」、「空格」以及「花括号」的位置。

<?php
try {
 // try body
} catch (FirstExceptionType $e) {
 // catch body
} catch (OtherExceptionType $e) {
 // catch body
}

6. 闭包

闭包声明时,关键词 function 后以及关键词 use 的前后都 必须 要有一个空格。

开始花括号 必须 写在声明的同一行,结束花括号 必须 紧跟主体结束的下一行。

参数列表和变量列表的左括号后以及右括号前,一定不可 有空格。

参数和变量列表中,逗号前 一定不可 有空格,而逗号后 必须 要有空格。

闭包中有默认值的参数 必须 放到列表的后面。

标准的闭包声明语句如下所示,注意其「括号」、「空格」以及「花括号」的位置。

<?php
$closureWithArgs = function ($arg1, $arg2) {
 // body
};
$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
 // body
};

参数列表以及变量列表 可以 分成多行,这样,包括第一个在内的每个参数或变量都 必须 单独成行,而列表的右括号与闭包的开始花括号 必须 放在同一行。

以下几个例子,包含了参数和变量列表被分成多行的多情况。

<?php
$longArgs_noVars = function (
 $longArgument,
 $longerArgument,
 $muchLongerArgument
) {
 // body
};
$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
};

注意,闭包被直接用作函数或方法调用的参数时,以上规则仍然适用。

<?php
$foo->bar(
 $arg1,
 function ($arg2) use ($var1) {
 // body
 },
 $arg3
);

【推荐课程:PHP视频教程

以上がPHP の PSR-2 コーディング スタイル仕様 (コード) の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。