PSR-4 PHP自动加载规范

在任何变成语言中,如何引入外部的资源文件都是一个非常重要的话题。php目前已经完美的支持一种优雅的文件加载机制,这个机制要远由于传统的require()/include()方式。

概述

此PSR描述了从文件路径自动加载的规范。 它与除了PSR-0在内的任何其他自动加载规范外,都完全兼容并可互操作。 此PSR还描述了根据规范,如何组织和安放可被自动加载的php文件的位置。

规范详解

  • 的自动加载, 包括了php的 class, interface, trait 和其他的类似结构

规范合格的PHP类名

<NamespaceName>(<SubNamespaceNames>)*<ClassName>

<命名空间>(<可选的子命名空间>)*<类名>

  • 一个合格的类名具有的特征

    1. 完全合格的类名必须具有顶级命名空间名称,也称为“供应商命名空间”, 一般使用开发者的组织名/公司名即可
    2. 完全合格的类名可以具有一个或多个子命名空间名称。
    3. 完全合格的类名必须具有终止类名。
    4. 下划线在完全合格类名的任何部分都没有特殊含义。
    5. 完全合格类名中的字母字符可以是小写和大写的任意组合
    6. 必须以区分大小写的方式引用所有类名。
  • 如何根据合格的类名进行加载

    1. 完全限定类名称(“名称空间前缀”)中的一个或多个前导命名空间和子命名空间名称的连续系列(不包括前导命名空间分隔符)对应于至少一个“基本目录”。
    2. “名称空间前缀”之后的连续子命名空间名称对应于“基本目录”中的子目录,其中名称空间分隔符表示目录分隔符。 子目录名称必须与子命名空间名称的大小写相匹配。
    3. 终止类名对应于以.php结尾的文件名。 文件名必须与终止类名称的大小写相匹配。

对于php类的自动加载,在过程中,绝不能抛出异常,不得引发任何级别的错误,并且不应该有返回值

官方实例

合格的类全名 命名空间前缀 指定的基本目录 php根据类全名去尝试加载的文件路径
\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 PHP自动加载规范解读与应用场景