このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
psr:psr4 [2020/05/16 00:43] y2sunlight [2. 仕様] |
psr:psr4 [2020/09/01 11:52] tanaka [PSR-4: Autoloading Standard] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | > 編集中 | ||
- | |||
- | ----- | ||
- | |||
====== PSR-4: Autoloading Standard ====== | ====== PSR-4: Autoloading Standard ====== | ||
--- // | --- // | ||
- | 本章は、若干の補足を加筆してはいるものの単に[[https:// | + | 本章は、若干の補足を加筆してはいるものの単に[[https:// |
- | ==== 目次 ==== | + | 関連記事 |
- | * [[psr:top|PHP - PHP標準勧告]] | + | |
+ | * [[psr:top|PSR - PHP標準勧告]] | ||
* [[psr: | * [[psr: | ||
* [[psr: | * [[psr: | ||
行 16: | 行 13: | ||
* [[psr: | * [[psr: | ||
* [[psr: | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
+ | * [[psr: | ||
----- | ----- | ||
行 42: | 行 49: | ||
===== 2. 仕様 ====== | ===== 2. 仕様 ====== | ||
- | 1.「クラス」という用語は、クラス、インターフェース、トレイト、および他の同様の構造を指します。 | + | **1.** **クラス**という用語は、クラス、インターフェース、トレイト、および他の同様の構造を指します。 |
- | 2.完全修飾クラス名の形式は次のとおりです。 | + | **2.** 完全修飾クラス名の形式は次のとおりです。 |
<div indent> | <div indent> | ||
行 52: | 行 59: | ||
</ | </ | ||
- | - 完全修飾クラス名には、**ベンダー名前空間**とも呼ばれるトップレベルの名前空間名が必要です('' | + | - 完全修飾クラス名には、**ベンダー名前空間**とも呼ばれるトップレベルの名前空間名が必要です('' |
- | - 完全修飾クラス名には、1つ以上のサブ名前空間名が含まれる場合があります('' | + | - 完全修飾クラス名には、1つ以上のサブ名前空間名が含まれる場合があります('' |
- | - 完全修飾クラス名は、クラス名で終了しなければなりません('' | + | - 完全修飾クラス名は、クラス名で終了しなければなりません('' |
- | - アンダースコアは、完全修飾クラス名のどの部分でも特別な意味はありません。 | + | - アンダースコアは、完全修飾クラス名のどの部分でも特別な意味はありません。\\ \\ |
- | - 完全修飾クラス名のアルファベット文字は、小文字と大文字の任意の組み合わせにすることができます('' | + | - 完全修飾クラス名のアルファベット文字は、小文字と大文字の任意の組み合わせにすることができます('' |
- | - すべてのクラス名は、大文字と小文字を区別して参照する必要があります('' | + | - すべてのクラス名は、大文字と小文字を区別して参照する必要があります('' |
- | 3.完全修飾クラス名に対応するファイルをロードするとき… | + | **3.** 完全修飾クラス名に対応するファイルをロードするとき… |
- | - 完全修飾クラス名内の1つ以上の先行する名前空間とサブ名前空間名の連続したシリーズ(**名前空間プレフィックス**)は、少なくとも1つの**ベースディレクトリ**に対応します。但し、名前空間プレフィックスには先頭の名前空間セパレータ(\)は含みません。 | + | - 完全修飾クラス名内の1つ以上の先行する名前空間とサブ名前空間名の連続したシリーズ(**名前空間プレフィックス**)は、少なくとも1つの**ベースディレクトリ**に対応します。但し、名前空間プレフィックスには先頭の名前空間セパレータ(\)は含みません。\\ \\ |
- | - **名前空間プレフィックス**の後の連続するサブ名前空間名は、**ベースディレクトリ**内のサブディレクトリに対応します。そして、名前空間セパレータ(\)はディレクトリセパレータを表します。サブディレクトリ名は、サブ名前空間名と大文字小文字を含めて一致する必要があります('' | + | - **名前空間プレフィックス**の後の連続するサブ名前空間名は、**ベースディレクトリ**内のサブディレクトリに対応します。そして、名前空間セパレータ(\)はディレクトリセパレータを表します。サブディレクトリ名は、サブ名前空間名と大文字小文字を含めて一致する必要があります('' |
- | - 最後に位置するクラス名は .php で終わるファイル名に対応します。ファイル名は、クラス名の大文字小文字と一致する必要があります('' | + | - 最後に位置するクラス名は .php で終わるファイル名に対応します。ファイル名は、クラス名の大文字小文字と一致する必要があります('' |
+ | |||
+ | **4.** オートローダーの実装は例外をスローしてはならず('' | ||
\\ | \\ | ||
===== 3. 例 ====== | ===== 3. 例 ====== | ||
+ | |||
+ | 以下の表は、与えられた(完全修飾クラス名, | ||
+ | |||
+ | {{tablelayout? | ||
+ | ^完全修飾クラス名^名前空間プレフィックス^ベースディレクトリ^ファイルパス^ | ||
+ | |\Acme\Log\Writer\File_Writer|Acme\Log\Writer|./ | ||
+ | |\Aura\Web\Response\Status|Aura\Web|/ | ||
+ | |\Symfony\Core\Request|Symfony\Core|./ | ||
+ | |\Zend\Acl|Zend|/ | ||
+ | |||
+ | |||
+ | 仕様に準拠したオートローダーの実装例については、[[https:// | ||
\\ | \\ | ||