千家信息网

PHP-PSR现代PHPer的开发规范是怎样的

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,PHP-PSR现代PHPer的开发规范是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。PSR是PHP Standa
千家信息网最后更新 2026年11月04日PHP-PSR现代PHPer的开发规范是怎样的

PHP-PSR现代PHPer的开发规范是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

PSR是PHP Standards Recommendation的简称,意为PHP推荐标准。要想了解PSR,首先得知道制定这一标准的人/组织是谁----PHP-FIG。

PHP-FIG

PHP-FIG全称为PHP Framework Interop Group,是一个组织,这个组织的成员由一些PHP框架的代表组成,这些人聚在一起"讨论框架之间的共性,寻找可以合作的方式"。PHP-FIG制订了推荐规范,PHP框架可以自愿实现这些规范,改进其他框架的通信和共享功能。
PHP-FIG的使命是实现框架之间的互操作性。

PSR-1:基本的代码风格

在文章的最开始,我们就已经简单介绍过什么是PSR,PSR是PHP标准,而PSR-1是PHP最基本也是最简单的标准。

PHP标签

必须把代码放在 或 标签中。不得使用其它的标签句法

这点相信很多PHPer都很容易遵守,而且在现实撸代码中一般都是采用正常的标签

编码

所有PHP文件都必须使用UTF-8字符集编码,而且不能有字节顺序标记(Byte Order Mark,BOM)

这个也很常见,就是无BOM和有BOM格式,记得刚开始敲PHP代码的时候,前辈总是很关照,一定要用IDE调成无BOM格式啊,当时表示懵懂,然后就跟着做了,现在看到这里,又重新查了资料,找到了为什么不能使用有BOM格式的原因,BOM会产生多余的输出,就像平白无故多了一个空行:

php在处理BOM头的时候,有时候存在错误,可能造成你在使用 header 或 session_start 之类的函数时,出现 文件已经输出的错误,多数都是因为BOM头送出去了。。因为在php看来,成了一个空格。所以使用无BOM的格式

目的

一个PHP文件可以定义符号(类、性状、函数、常量等),或者执行有副作用的操作(生成结果或者处理数据),但不能同时做两件事

这个规定的意思差不多就是一个变量、方法或者一个类,只能相应完成一个操作、做一件事情,这样保证了代码的清晰易懂,也保证了方法、变量的单一性,各司其职。其实也是为了方便,我们在以后项目/应用较大时,可以很好的解耦

自动加载

PHP的命名空间和类必须遵守PSR-4自动加载器标准

后续看PSR-4的具体解释

类的名称

PHP类的名称必须使用驼峰式,又名标题式

驼峰式和分词式(每个单词用_隔开)这两种写法,记得以前存在很大的争议,有人支持驼峰(GirlFriend),有人支持分词式(girl_friend),现在好了,统一规定出来了,为了PHP更好的发展,那就委屈支持分词式的兄弟,统一驼峰了。记得公司的CI2项目,用的就是这种分词式,不过也是框架规定,后来在自己的项目中,自己有预感的使用了驼峰式,哈哈,为自己的眼光点赞~

常量的名称

PHP的常量名称必须大写;

这点应该是毋庸置疑的吧,最开始写PHP的时候,这个写法已经根深蒂固了。

方法的名称

使用驼峰式(boyFriend)

方法的命名和类的命名方式有些相似,不过还是有些区别:类的命名规定首字母大写(BoyFriendMoney),而方法的命名规定首字母小写(boyFriendMoney)

PSR-2:严格的代码风格

PSR-2 相较于PSR-1是更为严格的代码规范。个人和官方都认为开发者应该遵循更为严格的代码标准,在现代的PHP生态系统中,风格统一,可以更好的让其他开发者理解PHP代码。

贯彻PSR-1

使用PSR-2 之前先要贯彻PSR-1

缩进

使用四个空格缩进。

关于缩进这个问题,相信有很多争议。我在真正正视这个问题之前,一直使用的都是IDE的tab键。然后当同事和自己在编写同一文件的时候,就会出先代码缩进不一的情况,导致代码结构非常乱。所以在出现这个问题之后,就统一了一下文件缩进的标准,以四个空格为缩进。这样的话,就算是用不一致的编辑器打开,效果也是一样的。
很多IDE都可以设置tab键,百度一下就可以搜到。

文件和代码行

PHP文件必须使用UNIX风格的换行符(LF),最后要有一个空行,而且不能使用PHP关闭 ?>标签。

最开始我也不懂为什么在纯PHP页面中不使用关闭 ?> 标签,后来在书中找到了答案

为了避免意料之外的输出错误,如果加上关闭标签,而且在关闭标签后有空行,那么这个空行也被当成输出,导致错误(例如,设定http首部时)

关键字

关键字,要使用小写;

之前不知道在哪儿看的PHP的教程,上面写的PHP代码像true、false这样的关键字都使用的是大写TRUE、FALSE,我也一直在这样使用,后来看到PSR-2的规范,才知道应该要使用小写,心累~

命名空间

每个命名空间语句后必须跟着一个空行。类似的,使用use关键字导入命名空间或为命名空间创建别名时,在一系列use声明语句后要加一个空行

类似于:

类

类定义体的起始括号应在类名之后另起一行写;
类定义体的结束括号必须在定义体之后新起一行写;

例:

方法

方法定义体的起始括号应在方法名之后另起一行写;
方法定义体的结束括号必须在方法定义体之后新起一行写;

请参考上面类示例中方法的例子。

可见性

1、类中的每个属性和方法都要声明可见性。可见性由public、protected或者private指定,其作用是决定在类的内部和外部如何访问属性的方法。
2、私有方法的名称前加上下划线
3、如果类属性声明为 abstract和 final,这两个限定符必须放在可见性关键字之前
4、如果属性、方法声明为 static,这个限定符必须放在可见性关键字之后

例子:

// 1、2public $sex;private $_sex;protected $sex;// 3、abstract public $sex;final public $sex;// 4、public static $sex;public static $age;

控制结构

所有控制结构关键字后面都要有一个空格。控制结构关键字包括: if、 elseif、 else、 switch、 case、 while、 do while、 for、 foreach、 try、 catch。如果控制结构关键字后面有一对圆括号,起始圆括号后面不能有空格,结束圆括号之前不能有空格。与类和方法的定义体不同,控制结构关键字后面的起始括号应该和控制机构关键字写在同一行。控制结构关键字后面的结束括号 必须写在单独一行。

例:

/** * 错误的示例:* 这里有4个错误:* 1、if关键词后面和圆括号之前没有空格* 2、圆括号前后有空格* 3、后圆括号和起始括号之前没有空格* 4、else关键词前后没有空格**/if( 1 == true ){    // do something}else{    // do something}/** * 正确的示例:**/if (1 == true) {    // do something} else {    // do something}

PSR-3:日志记录器接口

日志记录器

PHP-FIG发布的第三个推荐规范和前两个不同,这个有点特殊,是一个接口。规定PHP日志记录器组件可以实现的方法。

日志记录器是对象,用于把不同重要程度的消息写入指定的输出。记录的消息用于诊断、检查和排除应用中的操作、稳定性和性能方面的问题。例如:开发的时候把调试信息写入到文本文件,把网站的流量统计信息记录到数据库等。

相信基本上所有的框架中都实现了日志功能,那么如果想要使用PSR-3规范的日志记录器,该怎么做呢?首先要满足两点:

  1. 日志功能委托给第三方库实现

  2. 最终用户能选择他们喜欢的日志记录器组件

编写PSR-3日志记录器

符合PSR-3推荐规范的PHP日志记录器组件,必须包含一个实现Psr\Log\LoggerInterface接口的PHP类。PSR-3接口复用了RFC 5424系统日志协议,规定要实现9个方法:

下面的代码是我从PHP-FIG的官网上拿过来的,想了解详细信息的可以 点我

这个类中的每一个方法都对应RFC 5424协议的一个日志级别,而且都接受两个参数。第一个参数必须是一个字符串,或者有一个__toString()方法的对象。第二个参数为数组,可选参数;

如果要编写符合PSR-3规范的日志记录器,那么就要创建一个实现Psr\Log\LoggerInterface接口的PHP类,而且要提供这个接口中每个方法的具体实现

使用PSR-3日志记录器

PSR-3规范出来之后,达到这种效果的组件太多了,这里就不介绍,如何实现这个接口的类了。现在有成熟的日志记录器组件,推荐monolog/monolog。这个组件完全上线了PSR-3的接口,而且可以使用自定义的消息格式化程序和处理程序扩展功能。
如果monolog满足不了日常的使用,我们可以在此基础上拓展自己的方法,也非常简单;

使用monolog示例:

pushHandler(new StreamHandler('logs/development.log', Logger::DEBUG));$logger->pushHandler(new StreamHandler('logs/production.log', Logger::WARNING));// 使用日志记录器$logger->debug('This is debug message');$logger->debug('This is warning message');

PSR-4:自动加载器

PHP-FIG发布的第四个推荐规范描述了一个标准的自动加载器策略;自动加载器的意思就是指在程序运行时按需查找PHP类、接口(interface)或性状(trait)并将其载入加载器。

自动加载器策略

PSR-4推荐规范不要求改变代码的实现方式,只建议如何使用文件系统目录结构和PHP命名空间组织代码。PSR-4**依赖**PHP命名空间和文件系统目录结构查找并加载PHP类、性状和接口

为什么自动加载器很重要

举一个很常见的场景,我们引入文件通常都是采用require、include这样的方法,这样的方式简单也可靠,但是如果我们引入一两个还好说,但是当我们一个项目运行时需要引入几十个文件呢,那我们岂不是要写几十个require或者include?这样既不方便,又不美观,所以PHP-FIG在此基础上考虑,规范了一个统一的自动加载器策略;

如何使用自动加载器

建议使用依赖管理器Composer自动生成的PSR-4自动加载器。
现代的PHP框架,laravel、Yii、TP5等都使用了依赖Composer的自动加载器策略,方便我们下载组件和引入合适的类。

PSR-ME:制定自己的PHP规范

  1. 遵循PSR-1、PSR-2的使用规范

  2. 合适、精简的变量、方法、类命名。能让人看一眼就清楚是做什么的

  3. 尽量编写出高内聚、低耦合的代码

  4. 保持代码结构整洁、美观

PHP-FIG推出的PHP规范,并不一定说所有的PHP开发者必须遵守。制定这一规范的目的就是为了,在全世界的PHP开发者在查看代码的时候,能更加简单和轻松。造出来的组件/轮子可以很容易的就被所有开发者熟知和使用,同时也减少了我们的工作投入率,得到更大的工作效率,使产出大于投入,效率更高更快。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

方法 代码 日志 关键 文件 关键字 记录器 接口 结构 空间 标准 标签 框架 组件 开发 括号 空格 控制 推荐 一行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 江苏根荣互联网科技 奇酷互联网科技 互联网科技媒体 碳银互联网科技有限公司 天下捷融互联网科技 互联网科技公司介绍 互联网科技类展会 中正互联网科技招聘 老年人脱离互联网科技的作文 农村开互联网科技讲堂 字节跳动和互联网科技 浙江互联网科技研学营 黑科技闪耀互联网之光 米聚互联网科技南京有限公司排面 银川新华互联网科技学校联系电话 乌鲁木齐新华智原互联网科技学校 世界互联网科技成果奖 上海万顺科技互联网有限公司招聘 保山浩联互联网科技有限公司 瑞安市蟠桃会互联网科技有限公司 中智农互联网科技 新华互联网科技学校 智能科技公司是互联网公司吗 安徽鑫晟辉互联网科技 华脉科技工业互联网产品 汉立互联网科技有限公司联系电话 恒银科技与互联网金融 互联网时代科技改变生活 杭州壁岐互联网科技有限公司 现代互联网科技公司
0