资讯专栏INFORMATION COLUMN

PHP 规范之PSR规范

BothEyes1993 / 3339人阅读

摘要:参考自动加载已废弃基本代码规范代码样式日志接口如何指定文件路径从而自动加载类定义基本代码规范本篇规范制定了代码基本元素的相关标准,以确保共享的代码间具有较高程度的技术互通性。

概述

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代码文件 必须 以 不带 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自动加载规范

类似如下范例:()*

完全合规类名必须有一个顶级命名空间(Vendor Name)

完全合规类名可以有多个子命名空间

完全合规类名应该有一个终止类名

下划线在完全合规类名中是没有特殊含义的

字母在完全合规类名中可以是任何大小写的组合

所有类名必须以大小写敏感的方式引用

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

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

控制层

不出现sql语句(sql封装到模型层然后作为方法调用)

sql语句、3行以上逻辑代码空行

上下文关系函数或方法间不空行

bool使用if(true === $name)的形式

使用双引号链接变量

注意隐式转换

使用全局变量需要注释其含义,取值范围:

8 函数头部如下注释:

或者

9 注释间空行:

10 文件头部注释:

或者

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

12 标记变量的命名:

13 接口的命名前缀

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30757.html

相关文章

  • PHP代码修正CodeSniffer

    摘要:它包含两类脚本,和地址脚本对文件定义了一系列的代码规范通常使用官方的代码规范标准,比如的,能够检测出不符合代码规范的代码并发出警告或报错可设置报错等级。脚本能自动修正代码格式上不符合规范的部分。 Last-Modified: 2019年5月10日13:59:27 参考链接 PHP开发规范之使用phpcbf脚本自动修正代码格式 在PhpStorm中使用PSR2编码规范phpcbf脚本自...

    khs1994 评论0 收藏0
  • PHP 系列:代码规范 Code Sniffer

    摘要:脚本对文件定义了一系列的代码规范通常使用官方的代码规范标准,比如的,能够检测出不符合代码规范的代码并发出警告或报错可设置报错等级。比如规范中对每一个文件的结尾都需要有一行空行,那么运行这个脚本后就能自动在结尾处加上一行空行。 showImg(https://segmentfault.com/img/remote/1460000011338137); 有些同学可能还没听过这东西,大概介绍...

    0xE7A38A 评论0 收藏0
  • PHP-PSR 现代PHPer的开发规范

    摘要:的使命是实现框架之间的互操作性。个人和官方都认为开发者应该遵循更为严格的代码标准,在现代的生态系统中,风格统一,可以更好的让其他开发者理解代码。记录的消息用于诊断检查和排除应用中的操作稳定性和性能方面的问题。 原文是在我自己博客中,小伙伴也可以点阅读原文进行跳转查看,还有好听的背景音乐噢~     PSR是PHP Standards Recommendation的简称,意为PHP推荐标...

    zebrayoung 评论0 收藏0
  • PHP规范PSR-1

    摘要:命名空间需要遵循自动加载规范。和之后的版本必须使用规范的命名空间。这三种类型都要遵守以下规范常量类常量必须由大写字母组成,单词间由下划线组成。一旦使用了其中的某一项命名凡是,应该在一定的代码内保持一致库,包,类,或者方法范围内。 基本编码规范 此PHP标准包含了如何去编写高通用性代码中那些标准元素(class,function ,ect.)的正确姿势!在RFC 2119文档中描述了关键...

    stormjun 评论0 收藏0
  • PHP自动加载功能原理解析

    摘要:前言在开始之前,欢迎关注我自己的博客这篇文章是对自动加载功能的一个总结,内容涉及的自动加载功能的命名空间的与标准等内容。要实现第一步,第二步的功能,必须在开发时约定类名与磁盘文件的映射方法,只有这样我们才能根据类名找到它对应的磁盘文件。 前言 在开始之前,欢迎关注我自己的博客:www.leoyang90.cn 这篇文章是对PHP自动加载功能的一个总结,内容涉及PHP的自动加载功能、P...

    Imfan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<