问:PSR是什么?有什么作用?
答:psr 中文翻译过来是 提出标准建议。所以它是一套建议标准,那它是建议谁的呢?它是由PHP-FIG 翻译过来就是php 框架可互用性小组编写的,那当然是用来约束PHP的。其实呀并不是官方的组织,只是在php界影响力很大,而且确实这套标准很有用,所以大家都遵循这套标准了,就好比江湖中总有一些规矩,这样大家按规矩来,事情就好办了很多。
具体来说psr这是一套标准,是由5部分组成,分别是psr-0,psr-1,psr-2,psr-3,psr-4.是不是看到这里有点头皮发麻,难不成又是一本超过800页的文学著作,哈哈,没有,这套标准实际没有那么繁琐,他就是规定了几个标准,行走在php江湖,只要你遵循这套标准,畅通无阻。
简单来说按规范对象来说,其实是分成四部分的,-0和-4是一部分,-4是对-0的补充修正,可以归类为一套,剩余的各成一套。
Psr-0:自动加载标准:(官方给出来的条款)
1、一个完全合格的namespace和class必须符合这样的结构:“\< Vendor Name>(< Namespace>)*< Class Name>”
2、每个namespace必须有一个顶层的namespace("Vendor Name"提供者名字)
3、每个namespace可以有多个子namespace
4、当从文件系统中加载时,每个namespace的分隔符(/)要转换成 DIRECTORY_SEPARATOR(操作系统路径分隔符)
5、在类名中,每个下划线(_)符号要转换成DIRECTORY_SEPARATOR(操作系统路径分隔符)。在namespace中,下划线(_)符号是没有(特殊)意义的。
6、当从文件系统中载入时,合格的namespace和class一定是以 .php 结尾的
7、vendor name,namespaces,class名可以由大小写字母组合而成(大小写敏感的)
这套标准其实主要就是对命名空间进行了规范,让其与文件系统的路径对应起来,然后对下划线在命名空间和类名中分别进行了规范,同时对类名和方法名也进行了规范,如此便能在使用自动加载功能的时候,通过该规则方便的将所需的文件加载进来。不过这套标准存在一些不足,并不能满足面向package的自动加载(PSR0标准只负责顶级命名空间之后的映射关系,而顶层命名空间/Symfony应该关联到哪个目录,那就是用户或者框架自己定义的了)。因此,psr-4孕育而生。Psr-4能够满足面向package的自动加载,它规范了如何从文件路径自动加载类,同时也规范了自动加载文件的位置(psr-4要求循环去查找文件,在while循环中,会慢慢的缩短命名空间前缀的名称去需找合适的命名空间前缀,为了在命名空间中包含更多的内容,不用每次在父命名空间中新建一个文件夹的时候都去添加一个新的命名空间前缀)。
Psr-4:改进版自动加载规范(官方给出来的条款)
1.2.1 术语"class"是指classes类, interfaces接口, traits特性, 以及其他类似的结构.
1.2.2 一个完全合乎规格的类名(A fully qualified class name)格式如下:
\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
(1) 完全合规的类名必须(MUST)有一个顶级命名空间名称,也就是通常所说的"vendor命名空间".
(2) 完全合规的类名可以(MAY)有一个或多个二级命名空间名称(sub-namespace names).
(