PSR 4 自动加载
本篇规范中的 必须,不得,需要,应,不应,应该,不应该,推荐,可能 和 可选 等词按照 RFC 2119 中的描述进行解释
1. 概览
这篇 PSR 文档规定了如何从文件路径中 自动加载 类
它非常简单易用,有良好的兼容性,可以在任何自动加载规范中使用,包括 PSR-0
这篇 PSR 文档同时也规定了如何存放需要自动加载的文件,才能使用此规范的自动加载机制
2. 规范
-
此处的 类 泛指类 ( classes ) 、接口 ( interfaces ) 、特征 ( traits ) 和其他类似的结构
-
全限定类名具有以下形式
\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
-
全限定类名 必须 有一个顶级命名空间名称,也称为组织命名空间 ( vendor namespace )
-
全限定类名 可以 有一个或者多个子命名空间名称
-
全限定类名 必须 有一个最终的类名,也就是最后的类名必须是合法存在的
-
下划线在全限定类名中没有任何特殊含义( 在 PSR-0 中下划是有含义的 )
-
全限定类名 可以 是任意大小写字母的组合
-
所有类名的引用 必须 区分大小写
-
-
全限定类名的加载过程
-
在全限定的类名(一个「命名称空间前缀」)中,一个或多个前导命名空间和子命名空间组成的连续命名空间,不包括前导命名空间的分隔符,至少对应一个「根目录」
-
「名称空间前缀」后面的相邻子命名空间与根目录下的目录名称相对应(且必须区分大小写),其中名称空间的分隔符表示目录分隔符
-
最终的类名与以
.php
结尾的文件名保持一致,这个文件的名字必须和最终的类名相匹配
-
-
自动加载文件禁止抛出异常,禁止出现任何级别的错误,也不建议有返回值
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 |
想要了解一个符合规范的自动加载器的实现可以查看 示例文件
示例中的自动加载器禁止被视为规范的一部分,它随时都 可能 发生改变