PSR-0/PSR-4命名标准
最后更新于:2022-04-02 04:27:24
## PSR-0/PSR-4命名标准
>[danger] PSR是Proposing a Standards Recommendation(提出标准建议)的缩写,是由PHP Framework Interoperability Group(PHP通用性框架小组,简称PHP-FIG)发起的,通过他们命名就可以看出,这是个主要是针对框架通用性而做努力的开放性小组,他们的在Github上有自己的仓库地址,目前只有一个被接受的标准,那就是PSR-0标准,标准定义了PHP自动加载的命名规范和文件路径规范。 针对PSR-0标准主要提到了以下几点:
**要求:**
1. 一个完全合格的命名空间和类名必须有以下的结构“\<提供者名称>\(<命名空间>\)*<类名>”
2. 每个命名空间必须有顶级的命名空间(“提供者”)
3. 每个命名空间可以有任意多个子命名空间
4. 每个命名空间在被从文件系统加载时必须被转换为“操作系统路径分隔符”(DIRECTORY_SEPARATOR )
5. 每个“_”字符在“类名”中被转换为DIRECTORY_SEPARATOR 。“_”符号在命名空间中没有这个含义
6. 符合命名标准的命名空间和类名必须以“.php”结尾来加载文件
7. 提供商名称,命名空间,类名可以由大小写字母组成,其中命名空间和类名是大小写敏感的以保证多系统兼容性
8. 如果文件不存在需要返回false
> 对比PSR-0,除了PSR-4可以更简洁外,需要注意PSR-0中对下划线(_)是有特殊的处理的,下划线会转换成DIRECTORY_SEPARATOR,这是出于对PHP5.3以前版本兼容的考虑,而PSR-4中是没有这个处理的,这也是两者比较大的一个区别。
此外,PSR-4要求在autoloader中不允许抛出exceptions以及引发任何级别的errors,也不应该有返回值。这是因为可能注册了多个autoloaders,如果一个autoloader没有找到对应的class,应该交给下一个来处理,而不是去阻断这个通道。
PSR-4更简洁更灵活了,但这使得它相对更复杂了。例如通过完全符合PSR-0标准的class name,通常可以明确的知道这个class的路径,而PSR-4可能就不是这样了。
* * * * *
### 参考
[PHP-FIG — PHP Framework Interop Group](http://www.php-fig.org/)
[PHP FIG - github](https://github.com/php-fig)
[PHP FIG 标准规范中文版](https://psr.phphub.org/)
[PHP 标准规范中文版发布](https://segmentfault.com/a/1190000005036857)
*****
last update:2017-10-15 00:52:56
';