PSR-4 自动加载规范

简介

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/

猜你喜欢

转载自blog.csdn.net/lamp_yang_3533/article/details/80210769