このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 最新のリビジョン 両方とも次のリビジョン | ||
psr:psr1 [2020/04/23 00:08] y2sunlight [2. ファイル] |
psr:psr1 [2020/07/28 14:02] tanaka [PSR-1: Basic Coding Standard] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | > TODO: 編集中 | ||
- | |||
- | ----- | ||
- | |||
====== PSR-1: Basic Coding Standard ====== | ====== PSR-1: Basic Coding Standard ====== | ||
--- // | --- // | ||
- | 本章は、若干の補足を加筆してはいるものの単に[[https:// | + | 本章は、若干の補足を加筆してはいるものの単に[[https:// |
- | ==== 目次 ==== | + | 関連記事 |
- | * [[psr:top|PHP - PHP標準勧告]] | + | |
+ | * [[psr:top|PSR - PHP標準勧告]] | ||
* PSR-1: Basic Coding Standard - 基本コーディング規約 | * PSR-1: Basic Coding Standard - 基本コーディング規約 | ||
* [[psr: | * [[psr: | ||
行 16: | 行 13: | ||
* [[psr: | * [[psr: | ||
* [[psr: | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
----- | ----- | ||
- | ===== PSR-1: 基本コーディング規約 ===== | + | ====== PSR-1: 基本コーディング規約 |
--- // 原文より翻訳 [[https:// | --- // 原文より翻訳 [[https:// | ||
行 25: | 行 32: | ||
このセクションの規約は、共有されるPHPコードにおいて、高度な技術的相互運用性を保証するために必要な標準コーディング要素と見なす必要があるもので構成されています。 | このセクションの規約は、共有されるPHPコードにおいて、高度な技術的相互運用性を保証するために必要な標準コーディング要素と見なす必要があるもので構成されています。 | ||
- | このドキュメントのキーワード '' | + | このドキュメントのキーワード '' |
> **RFC 2119の説明** | > **RFC 2119の説明** | ||
> '' | > '' | ||
> '' | > '' | ||
- | > '' | + | > '' |
- | > '' | + | > '' |
> '' | > '' | ||
\\ | \\ | ||
- | ==== 1. 概観 ===== | + | ===== 1. 概観 |
* ファイルは、**<? | * ファイルは、**<? | ||
行 51: | 行 58: | ||
\\ | \\ | ||
- | ==== 2. ファイル ===== | + | ===== 2. ファイル |
- | === 2.1 PHPタグ ==== | + | ==== 2.1 PHPタグ |
- | > TODO: | + | PHPコードは長いタグ **<?php ?>** または短いechoタグ **<?= ?>** を使用する必要があります。 他のタグのバリエーションを使用してはなりません( '' |
- | === 2.2 文字コード ==== | + | ==== 2.2 文字コード |
- | > TODO: | + | PHPコードはBOMなしのUTF-8のみを使用する必要があります( '' |
- | === 2.3 副作用 ==== | + | ==== 2.3 副作用 ===== |
- | > TODO: | + | ファイルは、新しいシンボル(クラス、関数、定数など)を宣言する場合は、他の副作用を引き起こさないようにする必要があります( '' |
+ | |||
+ | 「副作用」という語句は、クラス、関数、定数などの宣言に直接関係しないロジックの実行を意味し、ファイルをインクルードするだけで、ロジックが実行されることを意味します。 | ||
+ | |||
+ | 「副作用」には、以下が含まれますが、これらに限定されません。 | ||
+ | |||
+ | * 出力の生成 | ||
+ | * requireまたはincludeの明示的な使用 | ||
+ | * 外部サービスへの接続 | ||
+ | * ini設定の変更 | ||
+ | * エラーまたは例外の発行 | ||
+ | * ローバル変数または静的変数の変更 | ||
+ | * ファイルの読み取りまたは書き込み など | ||
+ | |||
+ | 以下は、宣言と副作用の両方を含むファイルの例です。つまり、避けるべき例です: | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | // 副作用:ini設定の変更 | ||
+ | ini_set(' | ||
+ | |||
+ | // 副作用:ファイルのロード | ||
+ | include " | ||
+ | |||
+ | // 副作用:出力の生成 | ||
+ | echo "< | ||
+ | |||
+ | // 宣言 | ||
+ | function foo() | ||
+ | { | ||
+ | // 関数本体 | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 次の例は、副作用のない宣言を含むファイルです。つまり、見習うべき例です: | ||
+ | < | ||
+ | <?php | ||
+ | // 宣言 | ||
+ | function foo() | ||
+ | { | ||
+ | // 関数本体 | ||
+ | } | ||
+ | |||
+ | // 条件付き宣言は副作用ではありません | ||
+ | if (! function_exists(' | ||
+ | function bar() | ||
+ | { | ||
+ | // 関数本体 | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
\\ | \\ | ||
- | ==== 3. 名前空間とクラス名 ===== | + | ===== 3. 名前空間とクラス名 |
- | > TODO: | + | 名前空間とクラスは、オートローディングPSR ([[https:// |
+ | |||
+ | これは、各クラスがそれ自体でファイル内にあり、少なくとも1つのレベルのネームスペース(トップレベルはベンダー名です)にあることを意味します。 | ||
+ | |||
+ | クラス名は**StudlyCaps**で宣言する必要があります( '' | ||
+ | |||
+ | > | ||
+ | |||
+ | PHP 5.3以降用に記述されたコードは、正式な名前空間を使用する必要があります( '' | ||
+ | |||
+ | 例えば: | ||
+ | <code php> | ||
+ | <?php | ||
+ | // PHP 5.3以降 | ||
+ | namespace Vendor\Model; | ||
+ | |||
+ | class Foo | ||
+ | { | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 5.2.x以前向けに記述されたコードは、クラス名の前にプレフィックス( **Vendor_** など)の疑似名前空間規則を使用する必要があります( '' | ||
+ | |||
+ | <code php> | ||
+ | <?php | ||
+ | // PHP 5.2.xおよびそれ以前 | ||
+ | class Vendor_Model_Foo | ||
+ | { | ||
+ | } | ||
+ | </ | ||
\\ | \\ | ||
- | ==== 4. クラス定数、プロパティ、メソッド ===== | + | ===== 4. クラス定数、プロパティ、メソッド ====== |
+ | |||
+ | 「クラス」という用語は、すべてのクラス(class)、インターフェース(interface)、およびトレイト(trait)を指します。 | ||
+ | |||
+ | ==== 4.1 定数 ==== | ||
+ | クラス定数は、アンダースコア区切りで大文字で宣言する必要があります( '' | ||
+ | |||
+ | <code php> | ||
+ | namespace Vendor\Model; | ||
+ | |||
+ | class Foo | ||
+ | { | ||
+ | const VERSION = ' | ||
+ | const DATE_APPROVED = ' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== 4.2 プロパティ ==== | ||
+ | このガイドでは、プロパティ名について、**StudlyCaps**、**camelCase**、または **under_score** の使用に関する推奨を意図的に避けています。 | ||
+ | |||
+ | > | ||
+ | > | ||
+ | > | ||
+ | |||
+ | どのような命名規則が使用されていても、合理的なスコープで一貫して適用されるべきです。そのスコープとは、ベンダーレベル、パッケージレベル、クラスレベル、またはメソッドレベルなどでしょう( '' | ||
- | > TODO: | + | ==== 4.3 メソッド ==== |
+ | メソッド名は **camelCase** で宣言する必要があります( '' | ||
\\ | \\ | ||