PHP面试一战到底
上QQ阅读APP看书,第一时间看更新

5.4 PSR-4标准

PSR(PHP Standard Recommendations)是由PHP FIG(Framework Interoperability Group,框架可互用性小组)组织制定的PHP规范,是PHP开发的实践标准。该项目通过开源框架的作者和其他协作组之间的讨论,以最低程度的限制,制定一个统一的编码规范,避免风格各异的代码规范阻碍PHP的发展。由于这些作者都在行业内具有一定影响力,所以PSR虽然不是PHP官方的标准,但也得到大多数开发者的认同,越来越多的开发者遵从PSR标准。

FIG组织目前已表决通过了6套标准,如表5-3所示。

表5-3 FIG提出的PSR标准

本节重点讲述PSR-4自动加载规范。

PSR-4是关于从文件路径自动加载对应类的规范,本规范具有可互操作性,可以作为任一自动加载规范的补充,其中包括PSR-0。此外,本规范还描述了如何根据规范来放置自动加载的类对应的文件存放路径。PSR-4的具体规范如下:

(1)术语“类”包括类、接口、traits可复用代码块以及其他类似的结构体。

(2)一个完整的、合格的类名称具有以下格式:

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

● 完整的、合格的类名称必须有一个顶级命名空间,即“vendor namespace”。

● 完整的、合格的类名称可以有一个或多个子命名空间。

● 完整的、合格的类名称必须有一个最终的类名称。

● 下画线在完整的、合格的类名称的任何位置,都没有任何特殊含义。

● 完整的、合格的类名称可以由任意大小写字母组成。

● 所有类名必须区分大小写。

(3)根据完整的、合格的类名称加载相应文件的规则如下:

● 完整的、合格的类名称,去掉最前面的命名空间分隔符之后,前面连续的一个或多个命名空间和子命名空间,作为命名空间前缀,其必须与至少一个根目录相对应。

● 命名空间前缀之后的子命名空间对应着一个根目录中的子目录,其中的命名空间分隔符代表目录分隔符。子目录名称必须与相应的子命名空间相匹配。

● 最终类名对应着一个以.php为后缀的文件。这个文件名必须与最终类名相同。

● 自动加载器(autoloader)的实现一定不可抛出异常,一定不可触发任一级别的错误信息,并且不应该有返回值。

面试题:PSR-4 标准

题目描述:什么是PSR-4,它与PSR-0有什么区别?

解答:关于PSR-4的知识见前文讲解。PSR-0是关于自动加载的第一个规范,已于2014年废弃使用,现在推荐PSR-4。它们之间的最大区别是PSR-0会将下画线当作目录分隔符使用,而PSR-4中下画线没有任何特殊含义。详细文档地址如表5-4所示。

表5-4 PSR标准文档地址