转自:http://www.cnblogs.com/x3d/p/php-psr-standards.html php
是PHP Standard Recommendation的简写,它其实应该叫PSRs,即系列推荐标准:目前经过的规范有PSR-0(Autoloading Standard)、PSR-1(Basic Coding Standard)、PSR-2(Coding Style Guide)、PSR-3(Logger Interface)、PSR-4(Improved Autoloading)。它不是PHP官方标准,而是从如Zend、Symfony2等知名PHP项目中提炼出来的一系列标准,目前有越来有多的社区项目加入成员并遵循该标准。html
PHP-FIG — PHP Framework Interoperability Group, 是制定PSRs开发规范的组织,它的成员由不少知名PHP社区项目组成,在其官网首页下方能够看到成员清单。这些成员制定规范,而且落实在本身的项目中。git
其实各个PSR规范的内容都很简洁明了,比起那些动则几十页的规范,真是好太多了。github
PSR-0即类自动加载规范(原文:官网、GitHub)。从2014-10-21日起,该规范被标记为Deprecated,由PSR-4替代。它的内容十分简洁。ide
内容:函数
Vendor Name
>\(<Namespace
>\)*<Class Name
>”Vendor Name
,命名空间,类名能够由大小写字母组成,其中命名空间和类名是大小写敏感的以保证多系统兼容性PSR-1即基础编码标准(原文:官网、GitHub)。内荣也十分简洁,包含了类文件、类名、类方法名的命名方法。ui
内容:编码
源文件必须只使用 <?php 和 <?= 这两种标签spa
源文件中php代码的编码格式必须只使用不带BOM的UTF-8操作系统
一个源文件建议只用来作声明(类,函数,常量等)或者只用来作一些引发反作用的操做(例如:输出信息,修改.ini配置文件等),但不该该同时作这两件事
命名空间和类必须遵照PSR-0标准
类名必须使用StudlyCaps写法
类中的常量必须只由大写字母和下划线(_)组成
方法名必须使用cameCase写法
PSR-2即编码风格标准(原文:官网、GitHub)。内容就稍多,但仍是比较简洁,它以PSR-1为基础,包含了缩进、每行代码长度、换行、方法可见性声明、空格和方法体大括号换行的相关规定。
标准内容:
代码必须遵照 PSR-1
代码必须使用4个空格来进行缩进,而不是用制表符
一行代码的长度不该有硬限制;软限制必须为120个字符,建议每行代码80个字符或者更少
在命名空间的声明下面必须有一行空行,而且在use的声明下面也必须有一行空行
类的左花括号必须放到其声明下面自成一行,右花括号则必须放到类主体下面自成一行
方法的左花括号必须放到其声明下面自成一行,右花括号则必须放到方法主体的下一行
全部的属性和方法必须有可见性声明;abstract和final声明必须在可见性声明以前;而static声明必须在可见性声明以后
在结构控制关键字的后面必须有一个空格;而方法和函数调用时后面不可有空格
结构控制的左花括号必须跟其放在同一行,右花括号必须放在该结构控制代码主体的下一行
控制结构的左括号以后不可有空格,右括号以前也不可有空格
PSR-3是对应用日志类的经过接口的定义(原文:官网、GitHub)。内容很简单,就是一个接口,官方示例代码引用一下就行了。固然,在具体的应用中,只要遵循该接口,确定能够定制相应的实现。
基础内容:
LoggerInterface暴露八个接口用来记录八个等级(debug, info, notice, warning, error, critical, alert, emergency)的日志。
第 九个方法是log,接受日志等级做为第一个参数。用一个日志等级常量来调用这个方法必须和直接调用指定等级方法的结果一致。用一个本规范中未定义且不为具 体实现所知的日志等级来调用该方法必须抛出一个Psr\Log\InvalidArgumentException。不推荐使用自定义的日志等级,除非你 很是肯定当前类库对其有所支持。
PSR-4即改进版的自动加载规范(原文:官网、GitHub)。它是PSR-0规范的接替者。它能够与任何其它的自动加载规范兼容,包括PSR-0。
内容:
彻底合规类名必须有一个顶级命名空间(Vendor Name)
彻底合规类名能够有多个子命名空间
彻底合规类名应该有一个终止类名
下划线在彻底合规类名中是没有特殊含义的
字母在彻底合规类名中能够是任何大小写的组合
全部类名必须以大小写敏感的方式引用
在彻底合规类名中,连续的一个或几个子命名空间构成的命名空间前缀(不包括顶级命名空间的分隔符),至少对应着至少一个基础目录
在「命名空间前缀」后的连续子命名空间名称对应一个「基础目录」下的子目录,其中的命名 空间分隔符表示目录分隔符。子目录名称必须和子命名空间名大小写匹配
终止类名对应一个以 .php 结尾的文件。文件名必须和终止类名大小写匹配
自动载入器的实现不可抛出任何异常,不可引起任何等级的错误;也不该返回值