目录
PSR-1基本代码规范" >PSR-1基本代码规范
PSR-2编码风格规范" >PSR-2编码风格规范
PSR-3日志接口规范" >PSR-3日志接口规范
PSR-4自动加载规范" >PSR-4自动加载规范
一些常用的自定义规范" >一些常用的自定义规范
控制层" >控制层
首页 后端开发 php教程 PHP规范之PSR规范

PHP规范之PSR规范

Apr 26, 2018 pm 02:42 PM
php 博客

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

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

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

<br>

<br>

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

  • PSR-1 基本代码规范

  • 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';

constINFO ='info';

constDEBUG ='debug';

}

PSR-4自动加载规范

类似如下范例:()*

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

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

 

8. 函数头部如下注释:

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

 

9. 注释间空行

// code one comments<br>program code one<br> <br>// code two comments<br>program code two

 

10. 文件头部注释

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

 

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

12. 标记变量的命名:

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

 

13.接口的命名前缀

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

 

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

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

 

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开发工

以上是PHP规范之PSR规范的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1668
14
CakePHP 教程
1426
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP与Python:了解差异 PHP与Python:了解差异 Apr 11, 2025 am 12:15 AM

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP的持久相关性:它还活着吗? PHP的持久相关性:它还活着吗? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP与其他语言:比较 PHP与其他语言:比较 Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP和Python:解释了不同的范例 PHP和Python:解释了不同的范例 Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

See all articles