![零基础PHP学习笔记](https://wfqqreader-1252317822.image.myqcloud.com/cover/195/36710195/b_36710195.jpg)
2.9 PHP编码规范
如今的Web开发,不再是一个人就可以全部完成的了,尤其是一些大型的项目,要十几个人甚至几十个人来共同完成。在开发过程中,会有新的开发人员参与进来,那么新的开发人员在阅读前开发人员留下的代码时,就会有疑问了——这个变量起到什么作用?那个函数实现什么功能?TmpClass类在哪里被使用到了?等等。这时,编码规范的重要性就体现出来了。
以PHP开发为例,编码规范就是在融合了开发人员长时间积累下来的经验之后,形成的一种良好统一的编程风格,这种良好统一的编程风格会在团队开发或二次开发时起到事半功倍的效果。编码规范是一种总结性的说明和介绍,并不是强制性的规则。
PSR是PHP Standard Recommendations的简写,是由PHP FIG组织制定的PHP规范,是PHP开发的实践标准。PHP标准组提出并发布了一系列的风格建议,其中一部分是关于代码风格的,即PSR-0、PSR-1、PSR-2和PSR-4。这些建议只是一些被其他项目所遵循的规则,如Drupal、Zend、Symfony、CakePHP、phpBB、AWS SDK、FuelPHP、Lithium等。
2.9.1 PSR-1编码规范
![](https://epubservercos.yuewen.com/7E78CA/19471983208811306/epubprivate/OEBPS/Images/40266-00-066-02.jpg?sign=1739265816-Bc0Ki88OTDSifls8dqq2MlDoMJ5OIrJY-0-061a29929be6291a7962adbb2d273869)
本节规范制定了代码基本元素的相关标准,以确保共享的PHP代码间具有较高程度的技术互通性。
• PHP代码文件必须以<?php或<?=标记开始。
• PHP代码文件必须以不带BOM的UTF-8编码。
• PHP代码中应该只定义类、函数、常量等声明,或其他会产生副作用的操作(如生成文件输出及修改.ini配置文件等),二者只能选其一。
命名空间及类必须符合PSR的自动加载规范:PSR-4中的一个。根据规范,每个类都独立为一个文件,且命名空间至少有一个层次:顶级的组织名称(vendor name)。类的命名必须遵循StudlyCaps式的以大写字母开头的驼峰命名规范。
PHP 5.3及以后版本的代码必须使用正式的命名空间。例如:
![](https://epubservercos.yuewen.com/7E78CA/19471983208811306/epubprivate/OEBPS/Images/067-1.jpg?sign=1739265816-gJulUBnJLCziBttlNiNuavFU0tfARVNY-0-1b879b1f9089d88ca0db90848f406a15)
PHP 5.2.x及之前的版本应该使用伪命名空间的写法,约定俗成使用顶级的组织名称(vendor name)如Vendor_为类前缀。例如:
![](https://epubservercos.yuewen.com/7E78CA/19471983208811306/epubprivate/OEBPS/Images/067-2.jpg?sign=1739265816-9Hj3ssoCV3yCvNoT8rAaywTJ6TCeFL1M-0-c5dfcb427b47417fedbeab8e64bf8883)
类中的常量所有字母都必须大写,单词间用下画线分隔,例如:
![](https://epubservercos.yuewen.com/7E78CA/19471983208811306/epubprivate/OEBPS/Images/067-3.jpg?sign=1739265816-r302Qj199JeKbmLp9TSGcuMMdQq8FvWr-0-8c42cc3ac81a76856e1e878a2934252c)
方法名称必须遵循camelCase式的以小写字母开头的驼峰命名规范。
2.9.2 PSR-2编码规范
![](https://epubservercos.yuewen.com/7E78CA/19471983208811306/epubprivate/OEBPS/Images/40266-00-067-01.jpg?sign=1739265816-Be8hQ58Xjjxkq8vcrlwIs99YyBlGgbCJ-0-927a7d42124077eacd700735b79ac555)
本节规范是[PSR-1][]基本代码规范的继承与扩展。
• 代码必须遵循PSR-1中的编码规范。
• 代码必须使用4个空格符而不是<Tab>键进行缩进。
• 每行的字符数应该软性保持在80个之内,理论上不可多于120个,但一定不可有硬性限制。
• 每个namespace命名空间声明语句和use声明语句块后面,必须插入一个空白行。
• 类的开始花括号“{”必须写在函数声明后自成一行,结束花括号“}”也必须写在函数主体后自成一行。
• 方法的开始花括号“{”必须写在函数声明后自成一行,结束花括号“}”也必须写在函数主体后自成一行。
• 类的属性和方法必须添加访问修饰符(private、protected及public),abstract及final必须声明在访问修饰符之前,而static必须声明在访问修饰符之后。
• 控制结构的关键字后必须要有一个空格符,而调用方法或函数时则一定不可有空格符。
• 控制结构的开始花括号“{”必须写在声明的同一行,而结束花括号“}”必须写在函数主体后自成一行。
• 控制结构的开始花括号“{”后和结束花括号“}”前一定不可有空格符。
以下代码简单地展示了以上大部分规范:
![](https://epubservercos.yuewen.com/7E78CA/19471983208811306/epubprivate/OEBPS/Images/068-1.jpg?sign=1739265816-9orYKAmht5sDiyywWrrD5Jn3myF0sYy3-0-658ac80f93947d54b0cab7054c4ea65f)