简介
PSR-4 Autoloader,指的是 PHP 的自动加载规范。
PSR-4 是从文件路径自动加载对应的类的规范。它是可互相协作的,可用于补充其他的自动加载规范(包括 PSR-0)。此外,本规范还描述了自动加载的文件如何放置的问题。
规范说明
这里的类指的是 class、interface、trait 以及其他类似的结构。
完整的类名
一个完整的类名的形式是:
\<命名空间>(\<子命名空间>)*\<类名>
- 完整的类名 必须 要有一个顶级命名空间,被称为 "vendor namespace";
- 完整的类名 可以 有一个或多个子命名空间;
- 完整的类名 必须 有一个最终的类名;
- 完整的类名中任意一部分的下滑线都没有特殊含义;
- 完整的类名 可以 由任意大小写字母组成;
- 所有类名 必须 是大小写敏感的。
文件加载
当根据完整的类名加载对应的类文件时:
- 完整的类名中,去掉头部的命名空间分隔符,前面连续的一个或多个命名空间和子命名空间,被称作『 命名空间前缀 』,它必须与至少一个文件基目录相对应。如 Monolog 。
- 紧接在命名空间前缀后的子命名空间,必须与对应的文件基目录相匹配,其中的命名空间分隔符将作为目录分隔符。如 Monolog\Handler 。
- 末尾的类名 必须 与对应的以 .php 为后缀的文件同名。如 use Monolog\Handler\AbstractHandler 加载的就是 vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php 类文件。
- 自动加载器(autoloader)的实现 一定不可 抛出异常、一定不可 触发任何级别的错误信息,也不应该有返回值。
示例
下表展示了符合 PSR-4 规范的完整类名、命名空间前缀、文件基目录、文件路径之间的对应关系。
完整的类名 | 命名空间前缀 | 文件基目录 | 文件路径 |
---|---|---|---|
\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 |
更多详情可参考官方:https://www.php-fig.org/psr/psr-4/