0

0

PHP规范之PSR规范

不言

不言

发布时间:2018-04-26 14:42:31

|

4088人浏览过

|

来源于php中文网

原创

这次的这篇文章介绍的是关于PHP规范中的psr规范,现在分享给大家,有兴趣的小伙伴可以看一看

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

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


  • PSR-0 自动加载 X已废弃

  • PSR-1 基本代码规范

    立即学习PHP免费学习笔记(深入)”;

  • PSR-2 代码样式

  • PSR-3 日志接口

  • PSR-4 如何指定文件路径从而自动加载类定义

 

PSR-1基本代码规范

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

文件

·       PHP代码文件 必须  <span style="color:#858080;background:#F9FAFA;"><?php</span>  <span style="color:#858080;background:#F9FAFA;"><?=</span> 标签开始;

·       PHP代码文件 必须  <span style="color:#858080;background:#F9FAFA;">不带</span><span style="color:#858080;background:#F9FAFA;"> BOM </span><span style="color:#858080;background:#F9FAFA;">的</span><span style="color:#858080;background:#F9FAFA;"> UTF-8</span> 编码;

·       PHP代码中 应该 只定义类、函数、常量等声明,或其他会产生 <span style="color:#FF0000;background:#F9FAFA;">副作用</span> 的操作(如:生成文件输出以及修改 .ini 配置文件等),二者只能选其一;

 

命名空间与类

·       类命名 必须 遵循 <span style="color:#858080;background:#F9FAFA;">StudlyCaps</span> 大写开头的驼峰命名规范;

·       每个类都独立为一个文件,且命名空间至少有一个层次:顶级的组织名称(vendorname

  • 类属性小写开头驼峰 $studlyCaps

  • 类方法:小写开头驼峰

 

常量

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

  • 方法名称 必须 符合 <span style="color:#858080;background:#F9FAFA;">camelCase</span> 式的小写开头驼峰命名规范。

 

PSR-2编码风格规范

缩进

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

  • 每行的字符数 应该 软性保持在 80 个之内,一定不可 多于 120 个,但 一定不可 有硬性限制。

  • 所有PHP文件必须以一个空白行作为结束。

  • 每行 一定不可存在多于一条语句

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

  • 的开始花括号({) 必须 写在函数声明后自成一行,结束花括号(})也 必须 写在函数主体后自成一行

  • 方法的开始花括号({) 必须 写在函数声明后自成一行,结束花括号(})也 必须 写在函数主体后自成一行

  • 控制结构的开始花括号({) 必须 写在声明的同一行,而结束花括号(}) 必须 写在主体后自成一行

 

修饰符

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

 

空格

  • 类方法参数每个逗号后面必须要有一个空格,而逗号前面 一定不可 有空格

  • 控制结构的开始左括号后和结束右括号前,都 一定不可 有空格符。

关键字

·       控制结构的关键字后必须要有一个空格符,而调用方法或函数时则一定不可有。

  • PHP所有 关键字 必须 全部小写,常量 true 、false 和 null 也 必须 全部小写。

 

PSR-3日志接口规范

<span style="color:#858080;background:#F9FAFA;">LoggerInterface</span> 接口对外定义了八个方法,分别用来记录 RFC 5424 中定义的八个等级的日志:debug info notice warning error critical alert 以及 emergency

第九个方法 —— log,其第一个参数为记录的等级。可使用一个预先定义的等级常量作为参数来调用此方法,必须 与直接调用以上八个方法具有相同的效果。如果传入的等级常量参数没有预先定义,则 必须 抛出Psr\Log\InvalidArgumentException 类型的异常。在不确定的情况下,使用者 不该 使用未支持的等级常量来调用此方法。

/**

 * 日志等级常量定义

 */

class LogLevel

{

    constEMERGENCY='emergency';

    constALERT     ='alert';

    constCRITICAL  ='critical';

    constERROR     ='error';

    constWARNING   ='warning';

    constNOTICE    ='notice';

VanceAI Image Resizer
VanceAI Image Resizer

VanceAI推出的在线图片尺寸调整工具

下载

    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. 使用全局变量需要注释其含义,取值范围

/**
 *
全局变量总体说明
 * Global STATUS_CODE
 * 0
- SUCCESS
 * 2 - ERROR
 */
STATUS_CODE

 

8. 函数头部如下注释:

/*************************************************
Function:       //
函数中文名称
Description:    //
函数功能、性能等的描述
Calls:          // 被本函数调用的函数清单
Called By:      // 调用本函数的函数清单
Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)
Table Updated:  // 被修改的表(此项仅对于牵扯到数据库操作的程序)
Input:          // 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
Output:         // 对输出参数的说明。
Return:         // 函数返回值的说明
Others:         // 其它说明
 *************************************************/

 

9. 注释间空行

// code one comments
program code one
 
// code two comments
program code two

 

10. 文件头部注释

/************************************************************
Copyright (C), 1988-1999, Huawei Tech. Co., Ltd. //
版权
FileName: test.cpp                               //
文件名
Author:                                         // 作者
Version :                                       // 版本
Date:                                           // 日期
Description:                                    // 模块描述
Function List:                                  // 主要函数及其功能
History:                                        // 历史修改记录
<author>    <time>    <version >    <desc>
Lizhijian   17/10/11   1.0          init
 ***********************************************************/

 

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

12. 标记变量的命名:

temp 可缩写为 tmp  ;
flag 可缩写为  flg  ;
statistic 可缩写为  stat ;
increment 可缩写为  inc  ;
message 可缩写为  msg  ;

 

13.接口的命名前缀

add / remove       begin / end        create / destroy
insert
/delete       first / last         get / release
increment
/decrement                 put / get
add
/delete         lock / unlock      open / close
min
/max          old / new         start / stop
next
/previous      source / target     show / hide
send
/receive       source / destination
cut
/paste          up / down

 

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

应改为如下形式。
#defineTRUNK_IDLE 0
#define TRUNK_BUSY 1
 
if (Trunk[index].trunk_state == TRUNK_IDLE)
{
   
Trunk[index].trunk_state = TRUNK_BUSY;
   
... //program code
}

 

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

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

 

1. 变量自增自减写到表达式前面: --e >= $name
2. 程序顺序应该遵循:参数定义代码->判断逻辑代码->业务逻辑代码
3. 大的数据使用引用
4. 为逻辑代码里每个复杂度高/重复度高的代码添加注释
5. 尽量不为简短代码引入新的变量,减少变量污染
<br/>

1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。

2$row[’id’]的速度是$row[id]7倍。

3echoprint快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2

4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。

5、注销那些不用的变量尤其是大数组,以便释放内存。

6、尽量避免使用__get__set__autoload

7require_once()代价昂贵。

8include文件时尽量使用绝对路径,因为它避免了PHPinclude_path里查找文件的速度,解析操作系统路径所需的时间会更少。

9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()

10、函数代替正则表达式完成相同功能。

11str_replace函数比preg_replace函数快,str函数的效率是str_replace函数的四倍。

12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。

13、使用选择分支语句(译注:即switch case)好于使用多个ifelse if语句。

14、用@屏蔽错误消息的做法非常低效,极其低效。

15、打开apachemod_deflate模块,可以提高网页的浏览速度。

16、数据库连接当使用完毕时应关掉,不要用长连接。

17、错误消息代价昂贵。

18避免递增全局变量

相关推荐:

关于php规范的PSR-4 关于雷锋的手抄报 关于春节的手抄报 关于春节的古

PHP规范之PSR-1 php语言 php手册 php开发工

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1135

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2257

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1763

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

587

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

441

2024.04.29

chatgpt使用指南
chatgpt使用指南

本专题整合了chatgpt使用教程、新手使用说明等等相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.03.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ITcastjQuery视频教程
ITcastjQuery视频教程

共7课时 | 1.1万人学习

PHP课程
PHP课程

共137课时 | 13.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号