设为首页 收藏本站
查看: 786|回复: 0

[经验分享] PHP PSR 代码规范基本介绍

[复制链接]

尚未签到

发表于 2017-12-30 12:35:39 | 显示全部楼层 |阅读模式
  PSR 是 PHP Standard Recommendation 的简写,即PHP推荐标准。
  目前通过的规范有 PSR-0(Autoloading Standard)、PSR-1(Basic Coding Standard)、PSR-2(Coding Style Guide)、PSR-3(Logger Interface)、PSR-4(Improved Autoloading)。
  PSR 不是PHP官方标准,而是从如Zend、Symfony2等知名PHP项目中提炼出来的一系列标准,目前有越来越多的社区项目加入并遵循该标准。
  PHP FIG(Framework Interoperability Group)框架可互用性小组是制定PSR开发规范的组织。他们的目的在于以最低程度的限制制定一个统一的标准,让各个框架遵循统一的编码规范。
  ====================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)的实现不能抛出异常,不可引发任一级别错误,也不应该有返回值

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429661-1-1.html 上篇帖子: 无锁内存nosql---Yac的实战 下篇帖子: PHP实现QQ第三方登录的方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表