PSR-4(Autoloading Standard)を見ていく
要約ですので、所々省いている箇所あります。
オリジナルはこちら
概要
- ファイルパスからクラスを
autoloading
する仕様 PSR-0
も含め、その他のautoloading
の仕様と相互運用可能- このPSRは
autoloading
されるためのファイルを配置する場所も記述している
仕様
class
はクラス、インターフェース、トレイトなどの構造を指す- 完全修飾クラス名は下記の形式
\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
- 完全修飾クラス名は、
vendor namespace
で知られるトップレベルのネームスペースを持っていないといけません - 完全修飾クラス名は、1つ以上のサブネームスペースを持ってもよい
- 完全修飾クラス名は、最後にクラス名をもたないといけない
- アンダースコアは完全修飾クラス名の中で特別な意味を持ちません
- 完全修飾クラス名は大文字/小文字組み合わせてもよい
- すべてのクラス名は大文字/小文字区別します
- 完全修飾クラス名は、
- 完全修飾クラス名に対応するクラス名をロードする時は、
- オートローダーの実装では
exceptions
をthrowしてはいけない。どのレベルのエラーも出してはいけない。戻り値も返すべきではありません
Examples
FULLY QUALIFIED CLASS NAME | NAMESPACE PREFIX | BASE DIRECTORY | RESULTING FILE PATH |
---|---|---|---|
\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 |
- PSR4を実装したクラス例
Example Implementations of PSR-4 - PHP-FIG
- cakephpは↑のをほぼそのまま使っている模様
cakephp/ClassLoader.php at master · cakephp/cakephp · GitHub
- Codeigniter4のPSR4を実装したAutoloader
CodeIgniter4/Autoloader.php at develop · bcit-ci/CodeIgniter4 · GitHub
その昔PEARなどはライブラリを中央ディレクトリにイントールして使用していましたが、composerの登場により各プロジェクトごとにパッケージとして使うようになりました。
また名前空間のなかった時代の名残としてクラス名に'_‘で区切って擬似的に名前空間を作っていたり煩雑になったのを共通化しようよって感じかと!
PSR-5(PHPDoc Standard)はDRAFTなので、次はPSR-6(Caching Interface)へ・・・