🐘

PSR-4 オートローダー(日本語訳)

2023/12/30に公開

オートローダー

この文書中のMUST、MUST NOT、REQUIRED、SHALL、SHALL NOT、SHOULD、SHOULD NOT、RECOMMENDED、MAY、OPTIONAL というキーワードは、RFC 2119 で定義されているものと同じ意味で解釈されます。

1. 概要

このPSRは、ファイルパスからクラスをオートロードするための仕様を記述しています。PSR-0を含む、他のオートロード仕様と完全に相互運用可能で、それらに追加して使用することができます。このPSRは、仕様に従ってオートロードされるファイルを配置する場所も記述しています。

2. 仕様

  1. 「クラス」という用語は、クラス、インターフェース、トレイト、およびその他の類似の構造を指します。

  2. 完全修飾クラス名は以下の形式を持ちます。

    \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
    
    1. 完全修飾クラス名は、トップレベルの名前空間名(ベンダー名前空間とも呼ばれる)を持たなければなりません。(MUST)
    2. 完全修飾クラス名は、1つ以上のサブ名前空間名を持つことができます。(MAY)
    3. 完全修飾クラス名は、終端クラス名を持たなければなりません。(MUST)
    4. 完全修飾クラス名のいかなる部分においても、アンダースコアは特別な意味を持ちません。
    5. 完全修飾クラス名のアルファベット文字は、小文字と大文字の組み合わせであっても構いません。(MAY)
    6. 全てのクラス名は、大文字と小文字を区別して参照されなければなりません。(MUST)

  1. 完全修飾クラス名に対応するファイルを読み込む場合 ...

    1. 完全修飾クラス名の中の一つまたはそれより多くの先頭の名前空間セパレータを含まない先行する名前空間とサブ名前空間の名前(「名前空間接頭辞」)は、少なくとも1つの「ベースディレクトリ」に対応します。

    2. 「名前空間接頭辞」の後の連続したサブ名前空間名は、「ベースディレクトリ」における名前空間セパレータがディレクトリセパレータを表すようなサブディレクトリに対応します。サブディレクトリ名は、サブ名前空間名の大文字小文字と一致しなければなりません。(MUST)

    3. 終端クラス名は、.phpで終わるクラスファイル名の終端と対応します。ファイル名は、終端クラス名の大文字小文字と一致しなければなりません。(MUST)

  2. オートローダーの実装は例外をスローしてはならず(MUST NOT)、いかなるレベルのエラーもレイズしてはならず(MUST NOT)、値を返すべきではありません(SHOULD NOT)。

3. 例

以下の表は、与えられた完全修飾クラス名、名前空間接頭辞、およびベースディレクトリに対応するファイルパスを示します。

完全修飾クラス名 名前空間接頭辞 ベースディレクトリ ファイルパス
\Acme\Log\Writer\File_Writer Acme\Log\Writer ./acme-log-writer/lib/ ./acme-log-writer/lib/File_Writer.php
\Aura\Web\Response\Status Aura\Web /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php
\Symfony\Core\Request Symfony\Core ./vendor/Symfony/Core/ ./vendor/Symfony/Core/Request.php
\Zend\Acl Zend /usr/includes/Zend/ /usr/includes/Zend/Acl.php

例えば、仕様に従うオートローダーの実装は、例のファイルを参照してください。実装例は仕様の一部とみなされてはならず(MUST NOT)、いつでも変更される可能性があります(MAY)。

GitHubで編集を提案

Discussion