PSR-4 自动加载

PSR-4 自动加载_第1张图片
Psr-4.jpg

自动加载

  • 必须 (MUST) : 绝对,严格遵循,无条件遵守;
  • 一定不可 (MUST NOT) : 严令禁止;
  • 应该 (SHOULD) : 强烈建议这样做,但是不强求;
  • 不该 (SHOULD NOT) : 强烈不建议这样做,但是不要求;
  • 可以 (MAY)可选 (OPTIONAL) : 选择性高一点,在这个文档内,此词语使用较少;

1. Overview

PSR-4 描述了从文件路径中 自动加载 类的规范。它拥有非常好的兼容性,可以用于任何其他自动加载规范之外,包括 PSR-0。该 PSR 还描述了将根据规范自动加载的文件放在何处。

2. 规范 (Specification)

  1. 「class」术语指的是 类 (classes)接口 (interfaces)特征 (traits) 和 其他类似的结构。

  2. 一个 完全限定类名 具有以下形式:

    \(\)*\
    
    1. 完全限定类名 必须 拥有一个顶级命名空间名称,也被称作为「供应商命名空间」 (vendor namespace)。

    2. 完全限定类名 可以 有一个或者多个子命名空间名称。

    3. 完全限定类名 必须 有一个终止类名。PS:应该是指不能这样 \(\)*\ 来表示一个完整的类。

    4. 下划线在完全限定类名中没有任何特殊含义。(PSR-0 中下划线是有含义的)

    5. 完全限定类名中的字母字符 可以 是任意的大写和小写的组合。

    6. 所有类名都必须以区分大小写的方式引用。

  3. When loading a file that corresponds(符合,一致) to a fully qualified class name …

    1. 在完全限定的类名(一个「名称空间前缀」)中,由一个或多个前导名称空间和子名称空间名称(不包括前导名称空间分隔符)组成的连续命名空间至少对应一个「基准目录」。

    2. 「名称空间前缀」后面的相邻子命名空间与根目录下的目录名称相对应(且 必须 区分带小写),其中名称空间的分隔符表示目录分隔符。

    3. 最终的类名与以 .php 结尾的文件的文件名保持一致。文件的名称 必须 与最终类名的大小写匹配。

  4. 自动加载器的实现 一定不可 抛出异常,一定不可 引发任何级别的错误,也 不该 返回值。

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

想要了解一个符合规范的自动加载器的实现可以查看示例文件。示例中的自动加载器 一定不可 视为规范的一部分,它随时都可能发生改变。

你可能感兴趣的:(PSR-4 自动加载)