PHP-PSR规范

PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。

PHP FIG,FIG 是 Framework Interoperability Group(框架可互用性小组)的缩写,由几位开源框架的开发者成立于 2009 年,从那开始也选取了很多其他成员进来(包括但不限于 LaravelJoomlaDrupalComposerPhalconSlimSymfonyZend Framework 等),虽然不是「官方」组织,但也代表了大部分的 PHP 社区。

项目的目的在于:通过框架作者或者框架的代表之间讨论,以最低程度的限制,制定一个协作标准,各个框架遵循统一的编码规范,避免各家自行发展的风格阻碍了 PHP 的发展,解决这个程序设计师由来已久的困扰。

目前已表决通过了 6 套标准,已经得到大部分 PHP 框架的支持和认可。




==PSR-0(自动加载规范)==

PSR-0(Autoloading Standard)类自动加载规范,该规范现已废弃(Deprecated),它将由PSR-4替代。

1.一个完全合格的命名空间和类名必须遵循以下结构 "\VendorName\Namespace\ClassName"

2.每个命名空间必须有顶级的命名空间 "VendorName"

3.每个命名空间可以有任意多个子命名空间

4.每个命名空间在被文件系统加载时必须被转换为操作系统路径分隔符 (DIRECTORY_SEPARATOR)

5.每个"_"字符在"类名"中被转换为DIRECTORY_SEPARATOR。而在 PSR-4 中使用下划线没有任何特殊含义

6.符合命名标准的命名空间和类名必须以".php"结尾来加载文件

7.命名空间和类名可以由大小写字母组成,但必须对大小写敏感以保证多系统兼容性

==PSR-1(基本代码规范)==

PSR-1(Basic Coding Standard)基本代码规范,用以确保共享的PHP代码间具有较高程度的技术互通性。

1.PHP代码源文件必须以<?php 或 <?= 标签开始

2.PHP代码源文件必须使用不带 BOM 的 UTF-8 编码

3.一个源文件建议只用作定义类、函数、常量等声明,或者其他产生从属效应的操作(如:输出信息,修改配置文件等)

4.命名空间以及类必须符合 PSR 的自动加载规范:PSR-0 或 PSR-4

5.类的命名必须遵循 StudlyCaps 大写开头的驼峰式命名规范

6.类中的常量所有字母都必须大写,单词间用下划线分隔

7.方法名必须符合 camelCase 式的小写开头驼峰式命名规范

* BOM(byte order mark)是 Unicode 标准的一部分,通常用于标记纯文本字节序(byte order),使得文本处理程序能够识别读入的文件使用的 Unicode 编码(UTF-8、UTF-16、UTF-32)。

* 从属效应是指仅仅通过包含文件,不直接声明类、函数和常量而执行的逻辑操作。一份PHP源文件应该要么就只包含不产生从属效应的定义操作,要么就包含只会产生从属效应的逻辑操作,切勿同时包含两者。

==PSR-2(代码风格规范)==

 PSR-2(Coding Style Guide)代码风格规范,通过制定一系列规范化PHP代码的规则,以减少因代作者码风格不同而造成的阅读不便。

1.代码必须遵循 PSR-1 中的编码规范

2.代码必须使用4个空格来进行缩进,而非制表符(TAB)

3.建议每行代码字符数保持在80个以内,理论上不可多于120个,但不做硬性限制

4.每个 namespace 命名空间语句和 use 声明语句块后面必须插入一个空白行

5.类的左花括号 "{" 必须写在声明后自成一行,右花括号 "}" 也必须在类主体下自成一行

6.方法的左花括号 "{" 必须放在声明后自成一行,右花括号 "}" 也必须于主体下自成一行

7.类的属性和方法必须添加访问修饰符(private、protected、public),abstract 以及 final 必须声明在访问修饰符之前,而 static 必须声明在访问修饰符之后(例:final public static)

8.在控制结构关键字的后面必须有一个空格,而调用方法或函数时一定不能有(控制结构:if-else、switch-case、try-catch、while、foreach ...)

9.控制结构的左花括号 "{" 必须跟其处于同一行,右花括号 "}" 必须在控制结构主体之后自成一行

10.控制结构的开始左括号之后,和结束右括号之前都不可以有空格

==PSR-3(日志接口规范)==

PSR-3(Logger Interface)日志接口规范,主要目的是为了让日志类库通过接收一个 LoggerInterface 对象来记录日志信息。

1.LoggerInterface 接口对外定义了八个方法,分别用来记录 RFC 5424 中定义的八个等级的日志:debug、info、notice、warning、error、critical、alert、emergency

2.第九个方法 log(),第一个参数为记录等级。可使用一个预先定义的等级常量作为参数来调用此方法,必须与直接调用以上八个方法具有相同的效果。如果传入的等级常量没有预先定义,则必须抛出 psr\Log\InvalidArgumentException 类型的异常。不推荐使用自定义的日志等级,除非你非常确定当前类库对其有所支持。

==PSR-4(自动加载新规)==

PSR-4(Improved Autoloading)本规范是关于自动载入对应类的相关规范,是 PSR-0 自动加载规范的补充。

1.此处的“类”是一个泛称,它包含类、接口、traits 以及其他类似的结构

2.完全限定类名需要遵循以下结构:\<命名空间>(\<子命名空间>)*\<类名>

  * 完全限定类名必须要有一个顶级命名空间,被称为 "vendor namespace";

  * 完全限定类名可以有一个或多个子命名空间;

  * 完全限定类名必须有一个终止类名;

  * 完全限定类名中任意一部分中的下划线都没有特殊含义;

  * 完全限定类名可以由任意大小写字母组成;

     * 完全限定类名必须以大小写敏感的方式引用;

3.当根据完整的类名载入相应的文件时:

  * 完全限定类名中,连续的一个或几个子命名空间构成的命名空间前缀(不包括顶级命名空间的分隔符),至少对应着至少一个基础目录;

       * 紧接命名空间前缀后的子命名空间必须与相应的”文件基目录“相匹配,其中的命名空间分隔符将作为目录分隔符;

  * 终止类名对应一个以 .php 结尾的文件,文件名必须和终止类名大小写匹配;

4.自动加载器(autoloader)的实现不能抛出异常,不可引发任一级别错误,也不应该有返回值

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容