概述

PSR 不是PHP官方标准,而是从如Zend、Symfony2等知名PHP项目中提炼出来的一系列标准,目前有越来越多的社区项目加入并遵循该标准。

参考:http://psr.phphub.org/

PSR-0 自动加载 X已废弃
PSR-1 基本代码规范
PSR-2 代码样式
PSR-3 日志接口
PSR-4 如何指定文件路径从而自动加载类定义

PSR-1基本代码规范

本篇规范制定了代码基本元素的相关标准,以确保共享的PHP代码间具有较高程度的技术互通性。

文件

  1. PHP代码文件 必须 以 <?php 或 <?= 标签开始;
  2. PHP代码文件 必须 以 不带 BOM 的 UTF-8 编码;
  3. PHP代码中 应该 只定义类、函数、常量等声明,或其他会产生 副作用 的操作

(如:生成文件输出以及修改 .ini配置文件等),二者只能选其一;

命名空间与类

  1. 类命名 必须 遵循 StudlyCaps 大写开头的驼峰命名规范;
  2. 每个类都独立为一个文件,且命名空间至少有一个层次:顶级的组织名称(vendorname)
  3. 类属性:小写开头驼峰 $studlyCaps
  4. 类方法:小写开头驼峰

常量

  1. 类中的常量所有字母都 必须 大写,单词间用下划线分隔;
  2. 方法名称 必须 符合 camelCase 式的小写开头驼峰命名规范。

PSR-2编码风格规范

缩进

  1. 代码 必须 使用4个空格符而不是「Tab 键」进行缩进。

  1. 每行的字符数 应该 软性保持在 80 个之内,一定不可 多于 120 个,但 一定不可 有硬性限制。
  2. 所有PHP文件必须以一个空白行作为结束。
  3. 每行 一定不可存在多于一条语句 每个 namespace 命名空间声明语句和 use 声明语句块后面,必须 插入一个空白行。
  4. 类的开始花括号({) 必须 写在函数声明后自成一行,结束花括号(})也 必须写在函数主体后自成一行。
  5. 方法的开始花括号({) 必须 写在函数声明后自成一行,结束花括号(})也 必须 写在函数主体后自成一行。
  6. 控制结构的开始花括号({) 必须 写在声明的同一行,而结束花括号(}) 必须 写在主体后自成一行。

修饰符

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

空格

  1. 类方法参数每个逗号后面必须要有一个空格,而逗号前面 一定不可 有空格
  2. 控制结构的开始左括号后和结束右括号前,都 一定不可 有空格符。

关键字

  1. 控制结构的关键字后必须要有一个空格符,而调用方法或函数时则一定不可有。
  2. PHP所有 关键字 必须 全部小写,常量 true 、false 和 null 也 必须 全部小写。

PSR-3日志接口规范

  1. LoggerInterface 接口对外定义了八个方法,分别用来记录 RFC 5424 中定义的八个等级的日志:debug、 info、 notice、 warning、 error、 critical、 alert 以及 emergency 。
  2. 第九个方法 —— log,其第一个参数为记录的等级。可使用一个预先定义的等级常量作为参数来调用此方法,必须 与直接调用以上八个方法具有相同的效果。
  3. 如果传入的等级常量参数没有预先定义,则 必须 抛出PsrLogInvalidArgumentException 类型的异常。在不确定的情况下,使用者 不该 使用未支持的等级常量来调用此方法。
/*** 日志等级常量定义*/class LogLevel{constEMERGENCY='emergency';constALERT     ='alert';constCRITICAL  ='critical';constERROR     ='error';constWARNING   ='warning';constNOTICE    ='notice';constINFO      ='info';constDEBUG     ='debug';}

PSR-4自动加载规范

类似如下范例:<NamespaceName>(<SubNamespaceNames>)*<ClassName>

  1. 完全合规类名必须有一个顶级命名空间(Vendor Name)
  2. 完全合规类名可以有多个子命名空间
  3. 完全合规类名应该有一个终止类名
  4. 下划线在完全合规类名中是没有特殊含义的
  5. 字母在完全合规类名中可以是任何大小写的组合
  6. 所有类名必须以大小写敏感的方式引用
  7. 终止类名对应一个以 .php 结尾的文件。文件名必须和终止类名大小写匹配

一些实际商用项目中使用的规范

控制层

  1. 不出现sql语句(sql封装到模型层然后作为方法调用)
  2. sql语句、3行以上逻辑代码空行
  3. 上下文关系函数或方法间不空行
  4. bool使用if(true === $name)的形式
  5. 使用双引号链接变量
  6. 注意隐式转换
  7. 使用全局变量需要注释其含义,取值范围:

8 函数头部如下注释:

或者

9 注释间空行:

10 文件头部注释:

或者

11 switch语句的case跳转需要注释

12 标记变量的命名:

13 接口的命名前缀

14 状态码尽量使用常量,而不是难以理解的数字

15 类文件名使用首大写驼峰方式,普通文件名使用下划线方式

16 配置里的变量名使用下划线方式

PHP 规范之PSR规范相关推荐

  1. php rfc3986规范,「PSR 规范」PSR-7 HTTP 消息接口规范

    「PSR 规范」PSR-7 HTTP 消息接口规范 HTTP消息接口 此文档描述了 RFC 7230 和 RFC 7231 HTTP 消息传递的接口,还有 RFC 3986 里对 HTTP 消息的 U ...

  2. PHP规范之PSR规范

    参考:http://psr.phphub.org/ PSR 不是PHP官方标准,而是从如Zend.Symfony2等知名PHP项目中提炼出来的一系列标准,目前有越来越多的社区项目加入并遵循该标准. P ...

  3. 「PSR 规范」PSR-2 编码风格规范

    所有 PSR 规范请见:https://learnku.com/docs/psr https://learnku.com/laravel/t/2079/psr-specification-psr-2- ...

  4. 基于psr规范php框架,PHP-PSR规范

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

  5. PSR规范 (psr-0,psr-1,psr-2,psr-3,psr-4)

    这个规范,我只有在海康威视面试的时候碰到.不过还是很重要的.记录一下 简单总结,方便记忆.04是自动加载的规范, 12是代码规范, 3是日志规范,后面的数字就是升级版 PSR 是 PHP Standa ...

  6. CommonJS规范与AMD规范的理解

    2019独角兽企业重金招聘Python工程师标准>>> 链接地址:http://www.xx566.com/detail/32.html 谈到AMD,我们首先来了解一个基于AMD规范 ...

  7. php原生开发规范,php开发规范

    PHP 开发规范整理 代码样式规范 编码基本规范 a.代码必须遵守 PSR-1. b.文件编码Unicode (UTF-8) 编码保存.同时不要使用 字节序标记(BOM) c.代码必须使用4个空格的缩 ...

  8. Python代码规范和命名规范

    http://www.imooc.com/article/19184?block_id=tuijian_wz#child_5_1 Python代码规范和命名规范 前言 Python 学习之旅,先来看看 ...

  9. mysql数据库开发规范_开发规范——MYSQL数据库

    数据库规范 这里主要针对mysql数据库,其他数据库也可以借鉴 表 1.统一使用表命名规范 表名规范:分层+项目名缩写+实体名(小写)[+下划线+实体名+rel] 例子 表名:bc_user 分层: ...

最新文章

  1. linux怎么压缩后保留原文件,Linux 实现压缩保留源文件的方法
  2. struts2入门(搭建环境、配置、示例)
  3. spring注解注入属性
  4. 【内网安全】域横向网络传输应用层隧道技术
  5. HDU Problem - 5101 Select(二分)
  6. 百度优化有感,原创内容只是个传说
  7. leetcode —— 面试题 17.08. 马戏团人塔
  8. rust睡觉按键没反应_腐蚀Rust有哪些实用操作 腐蚀Rust实用操作汇总-游侠网
  9. 使用zabbix如何自动清理30天前的数据
  10. TModalResult 和 MessageBox 返回值
  11. MFC在一个工程中启动其他工程的exe文件
  12. Vue折腾记 - (2)写一个不大靠谱的面包屑组件
  13. 网易mumu模拟器的使用
  14. 【译】LiveData三连
  15. Linux 修改只读文件
  16. ADS1.2 Error:(Fatal) L6002u:could not open file C:/...
  17. 基于单片机c语言的豆浆机,基于单片机的全自动豆浆机控制系统设计.doc
  18. 【第五人格设计思路】守墓人·角色设计思路
  19. 操作系统学习笔记--互斥(共享资源)
  20. 管家婆辉煌版提示:嘚瑟反馈率F 请联系任我行软件股份公司或当地合法代理,有后门?

热门文章

  1. DB2 -SQLSTATE
  2. Chrome上最好用的广告拦截插件:AdBlock
  3. 《大爱东方》今晚首播 “金话筒”何婕任主持人
  4. JS判断是否IE浏览器
  5. 网易云音乐推荐算法分析
  6. 微信定向流量_微信沃卡发布 10元包300MB微信定向流量
  7. Python_捕获未知错误代码
  8. python模块和包_(三)运用Python模块和包
  9. 制造商零件编号(MPN)
  10. 【解析几何】解析几何(Analytic geometry)