PHP 规范之PSR规范
概述
PSR 不是PHP官方标准,而是从如Zend、Symfony2等知名PHP项目中提炼出来的一系列标准,目前有越来越多的社区项目加入并遵循该标准。
参考:http://psr.phphub.org/
PSR-0 自动加载 X已废弃
PSR-1 基本代码规范
PSR-2 代码样式
PSR-3 日志接口
PSR-4 如何指定文件路径从而自动加载类定义
PSR-1基本代码规范
本篇规范制定了代码基本元素的相关标准,以确保共享的PHP代码间具有较高程度的技术互通性。
文件
- PHP代码文件 必须 以 <?php 或 <?= 标签开始;
- PHP代码文件 必须 以 不带 BOM 的 UTF-8 编码;
- PHP代码中 应该 只定义类、函数、常量等声明,或其他会产生 副作用 的操作
(如:生成文件输出以及修改 .ini配置文件等),二者只能选其一;
命名空间与类
- 类命名 必须 遵循 StudlyCaps 大写开头的驼峰命名规范;
- 每个类都独立为一个文件,且命名空间至少有一个层次:顶级的组织名称(vendorname)
- 类属性:小写开头驼峰 $studlyCaps
- 类方法:小写开头驼峰
常量
- 类中的常量所有字母都 必须 大写,单词间用下划线分隔;
- 方法名称 必须 符合 camelCase 式的小写开头驼峰命名规范。
PSR-2编码风格规范
缩进
- 代码 必须 使用4个空格符而不是「Tab 键」进行缩进。
行
- 每行的字符数 应该 软性保持在 80 个之内,一定不可 多于 120 个,但 一定不可 有硬性限制。
- 所有PHP文件必须以一个空白行作为结束。
- 每行 一定不可存在多于一条语句 每个 namespace 命名空间声明语句和 use 声明语句块后面,必须 插入一个空白行。
- 类的开始花括号({) 必须 写在函数声明后自成一行,结束花括号(})也 必须写在函数主体后自成一行。
- 方法的开始花括号({) 必须 写在函数声明后自成一行,结束花括号(})也 必须 写在函数主体后自成一行。
- 控制结构的开始花括号({) 必须 写在声明的同一行,而结束花括号(}) 必须 写在主体后自成一行。
修饰符
类的属性和方法 必须 添加访问修饰符(private、protected 以及 public),abstract 以及final 必须 声明在访问修饰符之前,而 static 必须 声明在访问修饰符之后。
空格
- 类方法参数每个逗号后面必须要有一个空格,而逗号前面 一定不可 有空格
- 控制结构的开始左括号后和结束右括号前,都 一定不可 有空格符。
关键字
- 控制结构的关键字后必须要有一个空格符,而调用方法或函数时则一定不可有。
- PHP所有 关键字 必须 全部小写,常量 true 、false 和 null 也 必须 全部小写。
PSR-3日志接口规范
- LoggerInterface 接口对外定义了八个方法,分别用来记录 RFC 5424 中定义的八个等级的日志:debug、 info、 notice、 warning、 error、 critical、 alert 以及 emergency 。
- 第九个方法 —— log,其第一个参数为记录的等级。可使用一个预先定义的等级常量作为参数来调用此方法,必须 与直接调用以上八个方法具有相同的效果。
- 如果传入的等级常量参数没有预先定义,则 必须 抛出PsrLogInvalidArgumentException 类型的异常。在不确定的情况下,使用者 不该 使用未支持的等级常量来调用此方法。
/*** 日志等级常量定义*/class LogLevel{constEMERGENCY='emergency';constALERT ='alert';constCRITICAL ='critical';constERROR ='error';constWARNING ='warning';constNOTICE ='notice';constINFO ='info';constDEBUG ='debug';}
PSR-4自动加载规范
类似如下范例:<NamespaceName>(<SubNamespaceNames>)*<ClassName>
- 完全合规类名必须有一个顶级命名空间(Vendor Name)
- 完全合规类名可以有多个子命名空间
- 完全合规类名应该有一个终止类名
- 下划线在完全合规类名中是没有特殊含义的
- 字母在完全合规类名中可以是任何大小写的组合
- 所有类名必须以大小写敏感的方式引用
- 终止类名对应一个以 .php 结尾的文件。文件名必须和终止类名大小写匹配
一些实际商用项目中使用的规范
控制层
- 不出现sql语句(sql封装到模型层然后作为方法调用)
- sql语句、3行以上逻辑代码空行
- 上下文关系函数或方法间不空行
- bool使用if(true === $name)的形式
- 使用双引号链接变量
- 注意隐式转换
- 使用全局变量需要注释其含义,取值范围:
8 函数头部如下注释:
或者
9 注释间空行:
10 文件头部注释:
或者
11 switch语句的case跳转需要注释
12 标记变量的命名:
13 接口的命名前缀
14 状态码尽量使用常量,而不是难以理解的数字
15 类文件名使用首大写驼峰方式,普通文件名使用下划线方式
16 配置里的变量名使用下划线方式
PHP 规范之PSR规范相关推荐
- php rfc3986规范,「PSR 规范」PSR-7 HTTP 消息接口规范
「PSR 规范」PSR-7 HTTP 消息接口规范 HTTP消息接口 此文档描述了 RFC 7230 和 RFC 7231 HTTP 消息传递的接口,还有 RFC 3986 里对 HTTP 消息的 U ...
- PHP规范之PSR规范
参考:http://psr.phphub.org/ PSR 不是PHP官方标准,而是从如Zend.Symfony2等知名PHP项目中提炼出来的一系列标准,目前有越来越多的社区项目加入并遵循该标准. P ...
- 「PSR 规范」PSR-2 编码风格规范
所有 PSR 规范请见:https://learnku.com/docs/psr https://learnku.com/laravel/t/2079/psr-specification-psr-2- ...
- 基于psr规范php框架,PHP-PSR规范
PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准. PHP FIG,FIG 是 Framework ...
- PSR规范 (psr-0,psr-1,psr-2,psr-3,psr-4)
这个规范,我只有在海康威视面试的时候碰到.不过还是很重要的.记录一下 简单总结,方便记忆.04是自动加载的规范, 12是代码规范, 3是日志规范,后面的数字就是升级版 PSR 是 PHP Standa ...
- CommonJS规范与AMD规范的理解
2019独角兽企业重金招聘Python工程师标准>>> 链接地址:http://www.xx566.com/detail/32.html 谈到AMD,我们首先来了解一个基于AMD规范 ...
- php原生开发规范,php开发规范
PHP 开发规范整理 代码样式规范 编码基本规范 a.代码必须遵守 PSR-1. b.文件编码Unicode (UTF-8) 编码保存.同时不要使用 字节序标记(BOM) c.代码必须使用4个空格的缩 ...
- Python代码规范和命名规范
http://www.imooc.com/article/19184?block_id=tuijian_wz#child_5_1 Python代码规范和命名规范 前言 Python 学习之旅,先来看看 ...
- mysql数据库开发规范_开发规范——MYSQL数据库
数据库规范 这里主要针对mysql数据库,其他数据库也可以借鉴 表 1.统一使用表命名规范 表名规范:分层+项目名缩写+实体名(小写)[+下划线+实体名+rel] 例子 表名:bc_user 分层: ...
最新文章
- linux怎么压缩后保留原文件,Linux 实现压缩保留源文件的方法
- struts2入门(搭建环境、配置、示例)
- spring注解注入属性
- 【内网安全】域横向网络传输应用层隧道技术
- HDU Problem - 5101 Select(二分)
- 百度优化有感,原创内容只是个传说
- leetcode —— 面试题 17.08. 马戏团人塔
- rust睡觉按键没反应_腐蚀Rust有哪些实用操作 腐蚀Rust实用操作汇总-游侠网
- 使用zabbix如何自动清理30天前的数据
- TModalResult 和 MessageBox 返回值
- MFC在一个工程中启动其他工程的exe文件
- Vue折腾记 - (2)写一个不大靠谱的面包屑组件
- 网易mumu模拟器的使用
- 【译】LiveData三连
- Linux 修改只读文件
- ADS1.2 Error:(Fatal) L6002u:could not open file C:/...
- 基于单片机c语言的豆浆机,基于单片机的全自动豆浆机控制系统设计.doc
- 【第五人格设计思路】守墓人·角色设计思路
- 操作系统学习笔记--互斥(共享资源)
- 管家婆辉煌版提示:嘚瑟反馈率F 请联系任我行软件股份公司或当地合法代理,有后门?