25
2018
06

PHP 规范之 PSR-3

PHP基本规范之 PSR-4-autoloader


1. 概况

这个 PSR 描述的是通过文件路径自动载入类的指南;它作为对 PSR-0 的补充;根据这个 指导如何规范存放文件来自动载入;

2. 说明(Specification)

1. 类是一个泛称;它包含类,结构,traits 以及其他类似的结构;

2. 完整的类名应该类似如下范例:

\<NamespaceName>\<SubNamespaceNames>)\<ClassName>

  • 每一个命名空间必须有一个顶级命名空间(Vendor Name);

  • 每一个命名空间都可以有多个子命名空间;

  • 每一个命名空间的分隔符都必须转化成 DIRECTORY_SEPARATOR,当它被文件系统载入时;

  • 每一个在类名中的 _ 符号都会被转化成 DIRECTORY_SEPARATOR。而 _ 符号在 命名空间中没有任何意义;

  • 完整的的命名空间和类当从文件系统中被加载的时候,都会以 .php 为后缀;

  • Vendor 名,命名空间和类名中的英文字符可以是任意大小写的组合;

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


« 上一篇 下一篇 »

公告:

跟着我一起每天进步一点点,让学习成为一种习惯!

公告:

跟着我一起每天进步一点点,让学习成为一种习惯!