PSR 4 自动加载

本篇规范中的 必须,不得,需要,应,不应,应该,不应该,推荐,可能 和 可选 等词按照 RFC 2119 中的描述进行解释

1. 概览

这篇 PSR 文档规定了如何从文件路径中 自动加载

它非常简单易用,有良好的兼容性,可以在任何自动加载规范中使用,包括 PSR-0

这篇 PSR 文档同时也规定了如何存放需要自动加载的文件,才能使用此规范的自动加载机制

2. 规范

  1. 此处的 泛指类 ( classes ) 、接口 ( interfaces ) 、特征 ( traits ) 和其他类似的结构

  2. 全限定类名具有以下形式

    \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
    
    1. 全限定类名 必须 有一个顶级命名空间名称,也称为组织命名空间 ( vendor namespace )

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

    3. 全限定类名 必须 有一个最终的类名,也就是最后的类名必须是合法存在的

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

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

    6. 所有类名的引用 必须 区分大小写

  3. 全限定类名的加载过程

    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

想要了解一个符合规范的自动加载器的实现可以查看 示例文件

示例中的自动加载器禁止被视为规范的一部分,它随时都 可能 发生改变

PHP 标准规范

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.