由于PHP的灵活性,很多人写起代码来也不讲求一个好的代码规范,使得本就灵活的PHP代码看起来很乱,其实PSR规范中的PSR-1和PSR-2已经定义了在PHP编码中的一些规范,只要我们好好遵守这些规范,即使是使用灵活的脚本语言,也能写出非常漂亮工整的代码。首先我们来看一下已经通过的PSR规范,然后大致讲解一下PSR-1和PSR-2规范的一些具体要求。

已通过的PSR

PSR-1基础编码规范

  1. 开闭标签
    首先,PHP代码必须以<?php或<?=标签开始。换言之,我们不应该再使用短标签<?或其它变化形式。
  2. 副作用
    PHP文件要么声明类、接口、函数等,要么执行逻辑操作(如读写文件或向浏览器发送输出),但不应该同时兼具两者。
  3. 命名
    类的命名必须遵守大写开头的驼峰式命名规范。换言之,类名应当以大写字母开头。属性的命名方式没有强制要求,但应该保持一致。方法名称必须符合小写开头的驼峰式命名规范。类常量中的所有字母必须大写,单词之间以下划线分隔。

PSR-2编码风格规范

  1. PSR-1要求PHP代码以<?php开头。PSR-2规定,纯PHP文件不应该以一个?>标签结束,而应该以一个空白行结束。
  2. namespace声明后应该插入一个空白行,use声明语句块后也应该要有一个空白行。不要在同一行代码中进行多次use声明。
  3. 类的开始和结束
    class关键字、类名,以及extends和implements关键字必须在同一行中。如果一个类实现了多个接口,那么这些接口名可以在类声明的同一行中,也可以各占一行。如果选择将这些接口名放在多行中,那么第一个接口名必须自成一行,而不是跟在implements关键字后面。类的开始花括号({)应该写在函数声明后自成一行,结束花括号(})也应该写在类体后自成一行。也就是说,类声明看起来如下所示
class EarthGame extends Game implementsPlayable,Savable
{//类体
}

也可以将类名与类声明放在同一行中。

class EarthGame extends Game implements Playble, Savable
{//类体
}

  1. 属性声明
    每个属性都必须有访问修饰符(public、private或protected)。不可以使用关键字var声明属性。PSR-1中已经涵盖了属性名的规范:可以使用下划线、小写驼峰式命名或大写驼峰式命名方式,但应该保持一致。(个人推荐属性采用小写式驼峰)
  2. 方法的开始和结束
    所有方法必须具有访问修饰符(public、private或protected)。访问修饰符必须在abstract或final之后,static之前。具有默认值得方法参数应该放在参数列表的末尾。
  • 单行声明
    方法的开始花括号({)应该写在方法名后自成一行,结束花括号(})也应该写在方法体后自成一行(直接跟在方法代码之后)。方法参数列表不应该以空格开始或结束(即应该紧贴包裹着它们的圆括号)。对于每个参数,参数名(或默认值)后面应该有一个逗号,且逗号后面有一个空格。这听起来似乎有些复杂,如下所示:
final public static function generateTile(int $diamondCount, bool $polluted = false)
{//方法体
}

多行声明

如果方法有很多参数,那么单行方法声明是不实际的。此时我们可以分割参数列表,以便将每个参数(包括类型、参数变量、默认值和逗号)单独放在缩进的一行中。这种情况下,结束圆括号应该放在参数列表后面一行中,并与方法声明的开始位置对齐。开始花括号({)应该在同一行的结束圆括号之后,以空格分隔。方法体应该从新的一行开始。同样,这听起来似乎很复杂,以下示例应该能帮助你理解这条规定。

public function __construct(int $size,string $name,bool $warparound = false,bool $aliens = false
) {//方法体
}

  1. 行与缩进
    代码应该使用4个空格符来缩进,而不是使用制表符。我们可以检查编辑器设置,将其设置为按下Tab键时使用4个空格而不是制表符。每行代码的长度不应该超过120个字符。
  2. 方法与函数调用
    方法名称和开始圆括号之间不能有空格。方法调用中的参数列表的规则与方法声明中的参数列表规则相同。换言之,对于单行调用,开始圆括号后或结束圆括号前不能有空格。每个参数之后应该紧跟一个逗号,下一个参数前应该有一个空格。如果需要使用多行代码进行方法调用,那么每个参数应该自成一行并缩进,而且结束圆括号也应该自成一行。
$earthGanme = new EarthGame(5,'earth',true,true
);
$earthGame::generateTile(5, true);

流程控制

流程控制关键字(if、for、while等)后面必须紧跟一个空格。但是,开始圆括号后不能有空格。同样,结束圆括号前不能有空格。因此内容应该紧贴在括号内的。与类和(单行)函数声明相比,流程控制代码的开始花括号应该与结束圆括号在同一行。结束花括号应该自成一行。以下是一个简单的示例。

$title = [];
for ($x = 0; $x < $diamondCount; $x++) {if ($polluted) {$title[] = new PollutionDecorator(new DiamondDecorator(new Plains()));} else {$title[] = new DiamondDecorator(new Plains());}
}

注意if和for之后的空格。for和if语句与圆括号在同一行,而且它们的结束圆括号后都有一个空格,然后是流程控制体的开始花括号。

以上内容希望帮助到大家,更多PHP大厂PDF面试文档,PHP进阶架构视频资料,PHP精彩好文可以访问:

四年精华PHP技术文章整理合集——PHP框架篇

四年精华PHP技术文合集——微服务架构篇

四年精华PHP技术文合集——分布式架构篇

四年精华PHP技术文合集——高并发场景篇

四年精华PHP技术文章整理合集——数据库篇

php psr 编码规范_PHP编码风格规范相关推荐

  1. Python编码规范和Python风格规范

    一.原因 1.长期的工作中,发现大多数程序员的代码可读性差 2.不同的程序员之间的协作很重要,代码可读性必须很好 3.版本升级时,要基于源码升级 4.不友好的代码会影响python的执行效率 二.基于 ...

  2. php mysql 编码转换_PHP编码转换函数应用

    最近写了几个小程序,其中遇到了很多字符编码的问题,在这里总结一下 1.数据库中编码 数据库的编码一般在创建数据库时设置"整理",当然创建表时也需要设置的,而且只要有中文汉字.标点都 ...

  3. php字符集编码转换,php编码转换_php编码转换函数

    摘要 腾兴网为您分享:php编码转换函数,云端学习,鱼乐贝贝,优品多多,一路捞等软件知识,以及天地图厦门,快剪辑app,java学习手册,酷狗2010,王者荣耀点券软件,xmart,有声小说软件,mp ...

  4. php中编码转换,php编码转换_php编码转换函数

    摘要 腾兴网为您分享:php编码转换函数,掌上书院,小熊到家,先游,淘集集等软件知识,以及大傻串口调试,轻写作,重装精灵,qq飞车开道具技巧,东奥会计,c语言源代码,dwg转pdf,变形战机2,弹弹堂 ...

  5. php psr 编码规范_PHP之PSR-4规范:自动加载

    1. 概述 本 PSR 是关于由文件路径 自动载入 对应类的相关规范, 本规范是可互操作的,可以作为任一自动载入规范的补充,其中包括 PSR-0,此外, 本 PSR 还包括自动载入的类对应的文件存放路 ...

  6. PHP编码规范 代码样式风格规范

    一.基本约定 1.源文件 (1).纯PHP代码源文件只使用 <?php 标签,省略关闭标签 ?> : (2).源文件中PHP代码的编码格式必须是无BOM的UTF-8格式: (3).使用 U ...

  7. php团队规范,PHP团队 编码规范 代码样式风格规范

    一.基本约定 1.源文件 2.缩进 3.行 4.关键字 和 True/False/Null 5.命名 6.代码注释标签 7.业务模块 二.代码样式风格 1.命名空间(Namespace) 和 导入(U ...

  8. 软件开发php代码规范,php开发规范_PHP代码编写规范

    摘要 腾兴网为您分享:PHP代码编写规范,篆刻字典,优酷,学习计时,小t智联等软件知识,以及我爱写真网,哔哩哔哩唧唧app,碟中碟虚拟光驱,鬼泣31.3,西伯利亚t18,兄弟7450打印机驱动,活动a ...

  9. 「PSR 规范」PSR-2 编码风格规范

    所有 PSR 规范请见:https://learnku.com/docs/psr https://learnku.com/laravel/t/2079/psr-specification-psr-2- ...

最新文章

  1. 二分法典例:木棒切割问题
  2. AngularJs前端环境搭建
  3. Java 内存区域和GC机制
  4. [ASP.NET 控件实作 Day28] 图形验证码控件
  5. 删除数据清理oracle表空间,oracle数据库删除无用表空间及数据文件过程
  6. 华人数学家可以“恐怖”到什么程度?
  7. bootstrap table传回的数据后端怎么获取_基于 Spring Cloud 开发的分布式系统,遇到爬虫、接口盗刷怎么办
  8. 阿里巴巴正式上线全球首个数据中心Open Channel SSD产品
  9. Swift 2.0 自定义cell和不同风格的cell
  10. Python + vs +Opencv
  11. JanusGraph入门实操
  12. 解决:文件名太长删不掉
  13. 快手用最简单的方式感动每一个独特的你 原来背后的黑科技才是真的666
  14. Gym 100712G Heavy Coins
  15. 计算机初级职称答辩题,中小学职称评选答辩问题集锦
  16. 使用原生js仿写win10时钟
  17. 大数据是数字经济时代最关键的生产资料
  18. oracle xdpyinfo,Oracle 11g安装“无法使用命令/usr/bin/xdpyinfo自动检查显示器颜色”报错解决...
  19. 详解!千牛快捷短语在哪里设置
  20. 解决0x81000370不能登录MSN

热门文章

  1. 二级VB培训笔记04:程序控制结构、数组和过程
  2. 无心剑英译罗兰《境由心造》
  3. javascript核心_功能强大的JavaScript数组
  4. bzoj2756 [SCOI2012]奇怪的游戏 结论+网络流
  5. 2017.3.30 寿司晚宴 失败总结
  6. openwrt x86 登录不上_求助,关于OpenWRT外接硬盘不识别的问题
  7. 【英语学习】【English L06】U05 Appointments L6 The experience of booking or canceling
  8. Pentium 4处理器架构/微架构/流水线 (10) - NetBurst执行核详解 - 高速缓存/数据预取
  9. 广和通再推5G利器,发布高性价比5G模组FM650
  10. mysql 多表联合查询怎么一行显示_使用 explain 优化你的 mysql 性能