php psr编码规范

背景:

psr发明者和规范者:PHP-FIG,它的网站是:www.php-fig.org。就是这个联盟组织发明和创造了PSR-[0-4]规范

FIG 是 Framework Interoperability Group(框架可互用性小组)的缩写,由几位开源框架的开发者成立于 2009 年,从那开始也选取了很多其他成员进来,虽然不是 “官方” 组织,但也代表了社区中不小的一块。

组织的目的在于:以最低程度的限制,来统一各个项目的编码规范,避免各家自行发展的风格阻碍了程序设计师开发的困扰,于是大伙发明和总结了PSR,PSR是Proposing a Standards Recommendation(提出标准建议)的缩写,截止到目前为止,总共有5套PSR规范,分别是:

PSR-0 (Autoloading Standard) 自动加载标准 
PSR-1 (Basic Coding Standard) 基础编码标准 
PSR-2 (Coding Style Guide) 编码风格向导 
PSR-3 (Logger Interface) 日志接口 
PSR-4 (Improved Autoloading) 自动加载的增强版,可以替换掉PSR-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. verdor name,namespaces,class名可以由大小写字母组合而成(大小写敏感的)


PSR-1 规范 (规范制定了代码基本元素的相关标准

  1. PHP源文件必须只使用 <?php 和 <?= 这两种标签。
  2. 源文件中php代码的编码格式必须是不带字节顺序标记(BOM)的UTF-8。
  3. 一个源文件建议只用来做声明(类(class),函数(function),常量(constant)等)或者只用来做一些引起副作用的操作(例如:输出信息,修改.ini配置等),但不建议同时做这两件事。
  4. 命名空间(namespace)和类(class) 必须遵守PSR-0标准。
  5. 类名(class name) 必须使用骆驼式(StudlyCaps)写法 (注:驼峰式(cameCase)的一种变种,后文将直接用StudlyCaps表示)。
  6. 类(class)中的常量必须只由大写字母和下划线(_)组成。
  7. 方法名(method name) 必须使用驼峰式(cameCase)写法。


PRSR-2 规范(代码风格规范,减少阅读不同作者对代码,因风格不同而造成不便

    • 代码必须遵循PSR-1中的编码规范
    • 代码必须使用四个空格符而不是tab键进行缩进。
    • 每行的字符数应该软性保持在80个内,理论上不可多于120个,但一定不能由硬性限制
    • 每个namespace命名空间声明语句和use声明语句块后面,必须插入一个空白行
    • 类的开始花名号({)必须在函数声明后自成一行,结束花名号(})也必须在函数主体后自成一行
    • 类的属性和方法必须添加访问修饰符(private protected以及public),abstract以及final必须声明在访问修饰符之前,而static必须声明在访问修饰符之后。
    • 控制结构的关键字后必须要有一个空格符,而调用方法或函数时则一定不能有。
    • 控制结构的开始花括号({)必须写在声明的同一行,而结束花括号(})必须写在主体后自成一行。
    • 控制结构的开始左括号后和结束右括号前,都一定不能有空格符。

PSR-3 规范

PSR-3规范主要是来规范日志接口(Logger Interface)的接口对外定义了八个方法debug、info、notice、warning、error、critical、alert以及emergency。

PSR-4 规范

Autoloader 本PSR是关于由文件路径自动载入对应的类的相关规范,本规范是可互操作的。可以作为任一自动载入规范的补充,其中包括PSR-0,此外,本PSR还包括自动载入的类对应的文件存放路径规范。

  • 此处的“类”泛指所有的class类、接口、traits可复用代码块以及其他类似结构。
  • 一个完整的类名需要具有以下结构
  • \<命名空间>(\<子命名空间>)*\<类名>
  • 1.完整的类名必须要有一个顶级命名空间,被称为“Vendor namespace”
  • 2.完成的类名可以有一个或多个子命名空间
  • 3.完整的类名必须有一个最终的类名
  • 4.完整的类名中任意一部分中的下划线都是没有特殊意义的
  • 5.完整的类名可以由任意大小写字母组成
  • 6.所有类名都必须是大小写敏感的
  • 当根据完整的类名载入相应的文件......
  • 1.完整的类名中,去掉最前面的命名空间分隔符,前面连续的一个或多个命名空间和子命名空间,作为“命名空间前缀”,其必须与至少一个“文件基目录”相对应。
  • 2.紧接命名空间前缀后的子命名空间必须与相对应的“文件基目录”相匹配,其中的命名空间分隔符作为目录分割符
  • 3.末尾的类名必须与对应的.php为后缀的文件同名
  • 4.自动加载器(autoloader)的实现一定不能抛出异常,一定不能触发任一级别的错误信息以及不应该有返回值。


猜你喜欢

转载自blog.csdn.net/fish_study_csdn/article/details/80911070