ホームページ  >  記事  >  バックエンド開発  >  PHPのPSRシリーズの仕様内容はどのようなものですか?

PHPのPSRシリーズの仕様内容はどのようなものですか?

WBOY
WBOYオリジナル
2016-08-08 09:30:37676ブラウズ

PSR

は PHP Standard Recommendation の略語で、実際には PSR と呼ばれる必要があります。これは一連の推奨標準です。現在承認されている仕様には、PSR-0 (Autoloading Standard)、PSR-1 (Basiccoding Standard)、PSR-2 (Coding) が含まれます。スタイル ガイド)、PSR-3 (ロガー インターフェイス)、PSR-4 (改良された自動読み込み)。これは公式の PHP 標準ではありませんが、Zend や Symfony2 などの有名な PHP プロジェクトから抽出された一連の標準です。現在、ますます多くのコミュニティ プロジェクトがメンバーとして参加し、この標準に従っています。

PHP-FIG — PHP Framework Interoperability Group は、PSR の開発仕様を策定する組織です。そのメンバーは、多くの有名な PHP コミュニティ プロジェクトで構成されています。公式 Web サイトのホームページの下部にメンバー リストが表示されます。これらのメンバーは仕様を開発し、プロジェクトに実装します。

実際、各 PSR 仕様の内容は非常に簡潔かつ明確であり、数十ページにわたる仕様よりもはるかに優れています。

PSR-0(オートローディングスタンダード)

PSR-0は自動クラスロード仕様です(原文:公式Webサイト、GitHub)。 2014 年 10 月 21 日の時点で、この仕様は非推奨としてマークされており、PSR-4 に置き換えられています。その内容は非常に簡潔です。

内容:

  1. 完全修飾された名前空間とクラス名は、「<Vendor Name>(<Namespace>)*<Class Name>」という構造でなければなりません
  2. すべての名前空間にはトップレベルの名前空間 (「ベンダー名」) が必要です
  3. 各名前空間は任意の数のサブ名前空間を持つことができます
  4. 各名前空間は、ファイル システムからロードされるときに「オペレーティング システム パス区切り文字」(DIRECTORY_SEPARATOR) に変換される必要があります
  5. 「クラス名」の各「_」文字はDIRECTORY_SEPARATORに変換されます。 「_」記号は名前空間では明確な意味を持ちません
  6. ファイルをロードするには、命名標準に準拠した名前空間とクラス名が「.php」で終わる必要があります
  7. Vendor Name、名前空間とクラス名は大文字と小文字で構成できますが、マルチシステムの互換性を確保するために名前空間とクラス名は大文字と小文字が区別されます

PSR-1(基本コーディング標準)

PSR-1は基本的なコーディング標準です(原文:公式Webサイト、GitHub)。クラスファイルの命名方法、クラス名、クラスメソッド名などの内容は簡潔ですか?

内容:

  1. ソース ファイルではタグ のみを使用する必要があります

  2. ソースファイル内のphpコードのエンコード形式は、BOMなしのUTF-8のみを使用する必要があります

  3. ソース ファイルは、宣言 (クラス、関数、定数など) を行うためだけに使用するか、副作用を引き起こす一部の操作 (例: 情報の出力、.ini 設定ファイルの変更など) を実行するためだけに使用することをお勧めします。 、しかし、両方を同時に行うために使用されるべきではありません

  4. 名前空間とクラスは PSR-0 標準に準拠する必要があります

  5. クラス名はStudlyCapsを使用して記述する必要があります

  6. クラス内の定数は大文字とアンダースコア (_) のみで構成する必要があります

  7. メソッド名はcameCaseを使用して記述する必要があります

PSR-2(コーディングスタイルガイド)

PSR-2はコーディングスタイル標準です(原文:公式Webサイト、GitHub)。内容は若干増えていますが、PSR-1 に基づいており、インデント、コードの各行の長さ、改行、メソッドの可視性宣言、スペース、およびメソッド本体の中括弧の折り返しに関する関連規定が含まれています。

標準コンテンツ:

  1. コードはPSR-1に準拠する必要があります

  2. コードではインデントにタブではなく 4 つのスペースを使用する必要があります

  3. コード行の長さには厳密な制限はありません。ソフト制限は 120 文字でなければならず、コードの各行は 80 文字以下であることが推奨されます

  4. 名前空間宣言の下には空行が必要であり、use宣言の下にも空行が必要です

  5. クラスの左中括弧はその宣言の下の独自の行に配置する必要があり、右中括弧はクラス本体の下の独自の行に配置する必要があります

  6. メソッドの左中括弧は宣言の下の独自の行に配置する必要があり、右中括弧はメソッド本体の次の行に配置する必要があります

  7. すべてのプロパティとメソッドには可視性宣言が必要です。抽象宣言と最終宣言は可視性宣言の前になければならず、静的宣言は可視性宣言の後になければなりません。

  8. 構造制御キーワードの後に​​はスペースが必要です。メソッド呼び出しと関数呼び出しの後にはスペースがあってはなりません

  9. 構造制御の左中括弧はそれと同じ行に配置する必要があり、右中括弧は構造制御コード本体の次の行に配置する必要があります

  10. コントロール構造の左括弧の後にスペースを入れたり、右括弧の前にスペースを入れてはなりません

PSR-3(ロガーインターフェース)

PSR-3はインターフェースを介したアプリケーションログクラスの定義です(原文:公式サイト、GitHub)。内容は非常にシンプルで、公式のサンプルコードを引用するだけです。もちろん、特定のアプリケーションでは、このインターフェイスに従っている限り、対応する実装を間違いなくカスタマイズできます。

基本コンテンツ:

  1. LoggerInterface は、8 レベルのログ (デバッグ、情報、通知、警告、エラー、クリティカル、アラート、緊急) を記録するための 8 つのインターフェイスを公開します。

  2. 9 番目のメソッドは log で、最初のパラメータとしてログ レベルを受け入れます。ログ レベル定数を指定してこのメ​​ソッドを呼び出すと、指定したレベルのメソッドを直接呼び出した場合と同じ結果が得られる必要があります。この仕様で定義されておらず、実装に不明なログ レベルでこのメソッドを呼び出すと、PsrLogInvalidArgumentException がスローされる必要があります。現在のクラス ライブラリでカスタム ログ レベルがサポートされていることが確実でない限り、カスタム ログ レベルを使用することはお勧めできません。

PSR-4(自動読み込みの改善)

PSR-4は自動読み込み仕様の改良版です(原文:公式サイト、GitHub)。 PSR-0仕様の後継です。 PSR-0 を含む他の自動ロード仕様と互換性があります。

内容:

  1. 「クラス」という用語は、クラス、インターフェイス、特性、およびその他の同様の構造を含む一般的な用語です。
  2. 完全修飾クラス名は次の例のようになります: ()*

    1. 完全修飾クラス名にはトップレベルの名前空間 (ベンダー名) が必要です

    2. 完全修飾クラス名には複数のサブ名前空間を含めることができます

    3. 完全修飾クラス名には終了クラス名が必要です

    4. 完全修飾クラス名ではアンダースコアは特別な意味を持ちません

    5. 完全修飾クラス名では、文字は大文字と小文字を任意に組み合わせて使用​​できます

    6. すべてのクラス名は大文字と小文字を区別して引用符で囲む必要があります

  3. 完全修飾クラス名からファイルをロードする場合:
    1. 完全修飾クラス名では、1 つまたは複数の連続するサブ名前空間 (最上位の名前空間の区切り文字を除く) で構成される名前空間プレフィックスは、少なくとも 1 つのベース ディレクトリに対応します

    2. 「名前空間プレフィックス」の後の連続するサブ名前空間名は、「ベース ディレクトリ」の下のサブディレクトリに対応します。名前空間区切り文字はディレクトリ区切り文字を表します。サブディレクトリ名は、サブネームスペース名の大文字と小文字が一致する必要があります

    3. 終了クラス名は、.phpで終わるファイルに対応します。ファイル名は、終了クラス名の大文字と小文字が一致する必要があります

  4. オートローダーの実装は、例外をスローしたり、あらゆるレベルのエラーを引き起こしたり、値を返したりしてはいけません。

  5. 注: 特定の仕様内容は、他の中国語翻訳を参照して編集されています。

以上、PHP の PSR シリーズの仕様の内容をその側面も含めて紹介しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。