PHP的PSR系列规范都有啥内容

PSR

是PHP Standard Recommendation的简写,它其实应该叫PSRs,即系列推荐标准:目前通过的规范有PSR-0(Autoloading Standard)、PSR-1(Basic Coding Standard)、PSR-2(Coding Style Guide)、PSR-3(Logger Interface)、PSR-4(Improved Autoloading)。它不是PHP官方标准,而是从如Zend、Symfony2等知名PHP项目中提炼出来的一系列标准,目前有越来有多的社区项目加入成员并遵循该标准。

PHP-FIG — PHP Framework Interoperability Group, 是制定PSRs开发规范的组织,它的成员由很多知名PHP社区项目组成,在其官网首页下方可以看到成员清单。这些成员制定规范,并且落实在自己的项目中。

其实各个PSR规范的内容都很简洁明了,比起那些动则几十页的规范,真是好太多了。

PSR-0(Autoloading Standard)

PSR-0即类自动加载规范(原文:官网、GitHub)。从2014-10-21日起,该规范被标记为Deprecated,由PSR-4替代。它的内容十分简洁。

内容:一个完全合格的命名空间和类名必须有以下的结构“\\(\)*”

每个命名空间必须有顶级的命名空间(“Vendor Name”)

每个命名空间可以有任意多个子命名空间

每个命名空间在被从文件系统加载时必须被转换为“操作系统路径分隔符”(DIRECTORY_SEPARATOR )

每个“_”字符在“类名”中被转换为DIRECTORY_SEPARATOR 。“_”符号在命名空间中没有明确含义

符合命名标准的命名空间和类名必须以“.php”结尾来加载文件

Vendor Name,命名空间,类名可以由大小写字母组成,其中命名空间和类名是大小写敏感的以保证多系统兼容性

PSR-1(Basic Coding Standard)

PSR-1即基础编码标准(原文:官网、GitHub)。内容也是否简洁,包含了类文件、类名、类方法名的命名方法。

内容:源文件必须只使用

源文件中php代码的编码格式必须只使用不带BOM的UTF-8

一个源文件建议只用来做声明(类,函数,常量等)或者只用来做一些引起副作用的操作(例如:输出信息,修改.ini配置文件等),但不应该同时做这两件事

命名空间和类必须遵守PSR-0标准

类名必须使用StudlyCaps写法

类中的常量必须只由大写字母和下划线(_)组成

方法名必须使用cameCase写法

PSR-2(Coding Style Guide)

PSR-2即编码风格标准(原文:官网、GitHub)。内容就稍多,但还是比较简洁,它以PSR-1为基础,包含了缩进、每行代码长度、换行、方法可见性声明、空格和方法体大括号换行的相关规定。

标准内容:代码必须遵守 PSR-1

代码必须使用4个空格来进行缩进,而不是用制表符

一行代码的长度不应有硬限制;软限制必须为120个字符,建议每行代码80个字符或者更少

在命名空间的声明下面必须有一行空行,并且在use的声明下面也必须有一行空行

类的左花括号必须放到其声明下面自成一行,右花括号则必须放到类主体下面自成一行

方法的左花括号必须放到其声明下面自成一行,右花括号则必须放到方法主体的下一行

所有的属性和方法必须有可见性声明;abstract和final声明必须在可见性声明之前;而static声明必须在可见性声明之后

在结构控制关键字的后面必须有一个空格;而方法和函数调用时后面不可有空格

结构控制的左花括号必须跟其放在同一行,右花括号必须放在该结构控制代码主体的下一行

控制结构的左括号之后不可有空格,右括号之前也不可有空格

PSR-3(Logger Interface)

PSR-3是对应用日志类的通过接口的定义(原文:官网、GitHub)。内容很简单,就是一个接口,官方示例代码引用一下就好了。当然,在具体的应用中,只要遵循该接口,肯定可以定制相应的实现。

基础内容:LoggerInterface暴露八个接口用来记录八个等级(debug, info, notice, warning, error, critical, alert, emergency)的日志。

第 九个方法是log,接受日志等级作为第一个参数。用一个日志等级常量来调用这个方法必须和直接调用指定等级方法的结果一致。用一个本规范中未定义且不为具 体实现所知的日志等级来调用该方法必须抛出一个Psr\Log\InvalidArgumentException。不推荐使用自定义的日志等级,除非你 非常确定当前类库对其有所支持。

PSR-4(Improved Autoloading)

PSR-4即改进版的自动加载规范(原文:官网、GitHub)。它是PSR-0规范的接替者。它可以与任何其它的自动加载规范兼容,包括PSR-0。

内容:术语「类」是一个泛称;它包含类,接口,traits 以及其他类似的结构;

完全限定类名应该类似如下范例:()*完全限定类名必须有一个顶级命名空间(Vendor Name)

完全限定类名可以有多个子命名空间

完全限定类名应该有一个终止类名

下划线在完全限定类名中是没有特殊含义的

字母在完全限定类名中可以是任何大小写的组合

所有类名必须以大小写敏感的方式引用

当从完全限定类名载入文件时:在完全限定类名中,连续的一个或几个子命名空间构成的命名空间前缀(不包括顶级命名空间的分隔符),至少对应着至少一个基础目录

在「命名空间前缀」后的连续子命名空间名称对应一个「基础目录」下的子目录,其中的命名 空间分隔符表示目录分隔符。子目录名称必须和子命名空间名大小写匹配

终止类名对应一个以 .php 结尾的文件。文件名必须和终止类名大小写匹配

自动载入器的实现不可抛出任何异常,不可引发任何等级的错误;也不应返回值

注:具体规范内容参考了其他中文翻译版本整理。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

PHP聊天记录内啥,PHP的PSR系列轨范都有啥内容相关推荐

  1. php psr 什么意思,PHP的PSR系列规范都有啥内容,phppsr规范有啥_PHP教程

    PHP的PSR系列规范都有啥内容,phppsr规范有啥 PSR 是PHP Standard Recommendation的简写,它其实应该叫PSRs,即系列推荐标准:目前通过的规范有PSR-0(Aut ...

  2. 微信聊天记录内的文件如何实现自动同步备份?

    微信依然成为我们工作和生活中不可缺少的通讯工具,她不仅承载了我们的即时通讯,同时还有文件传输的功能.那么微信聊天记录内的文件如何实现自动同步备份? 准备工作: 1.我们需要做的就是找到自己电脑上微信文 ...

  3. 计算机基础知识教程excel单元格拆分,电脑内怎么将excel表格中某个单元格的内容拆分至不同单元格里...

    电脑内怎么将excel表格中某个单元格的内容拆分至不同单元格里 当我们在使用电脑的时候,可以下载excel软件来处理数据文件,那么如果想要将一个单元格中的内容拆分到不同的单元格中的话,应如何操作呢?接 ...

  4. openresty开发系列35--openresty执行流程之5内容content阶段

    openresty开发系列35--openresty执行流程之5内容content阶段 content 阶段 ---init阶段---重写赋值---重写rewrite---access content ...

  5. 玩 High API 系列好文:UGC内容检测、视频智能、拍照翻译、懂天气的草地喷水头...

    摘要:玩 High API 系列好文:UGC内容检测.视频智能.拍照翻译.懂天气的草地喷水头 导读:初创公司可以利用API来解决问题.了解更多场景如何玩High API?如何将API变现?请下载阿里云 ...

  6. curviloft插件怎么用_完结篇——你想要的逆天插件系列这里都有

    原标题:完结篇--你想要的逆天插件系列这里都有 十一前的一段时间,马克笔设计留学的安老师跟大家持续分享了几个非常实用的小插件,不知道大家用起来怎么样呢,是不是建模效率有了很大的提高.不过有些同学可能还 ...

  7. AutoCAD 2020安装失败(错误代码:1603)的解决方法/对于Autodesk系列产品都有效

    AutoCAD 2020安装失败(错误代码:1603) 这个解决方法对于Autodesk系列产品都有效 在官网找到的解决方法: 解决方案: 要处理此错误消息,请执行以下步骤: 1.找到这个文件夹C\P ...

  8. Vim内同时对多行增加或删除相同的内容

    问题:在Vim内同时对多行增加或删除相同的内容,如: item 1 item 2 item 3 变成(增加): my_item 1 my_item 2 my_item 3 再变成(删除): tem 1 ...

  9. 访问网络内不同ip段的计算机,[转]问题:话说两台电脑在一个局域网内,把它们的IP地址都设成不同的网段,请问,它们可不可以通讯?如...

    问题:话说两台电脑在一个局域网内,把它们的IP地址都设成不同的网段,请问,它们可不可以通讯?如果能,请问应该怎么做? (1)其实不论怎么设置,目的都是为了添加路由 网关只是间接添加了0.0.0.0的默 ...

最新文章

  1. javascript json和json字符串互转
  2. OSPF 报文 链路状态请求报文 LSR
  3. 25、Java Swing文本编辑器的实现
  4. js中this关键字的使用
  5. C#进阶之WebAPI(二)
  6. Sentinel一键下载安装运行_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0030
  7. SD从零开始29-30
  8. 如何通过局域网共享本机网页
  9. DFS序——树链剖分前驱知识
  10. 关于系统升级将暂停人爱官网、人爱数字化平台、人爱软件平台的通知
  11. 以合力加速基础软件创新:拆解鲲鹏众智如何繁荣新计算生态
  12. SQLSERVER EXPRESS 安装失败 code1645
  13. hello,这里是cathy的技术blog~
  14. java一键配置环境_JDK一键安装,配置环境
  15. DANN-经典论文概念及源码梳理
  16. 用 Python 给女友做了个可能会被打死的七夕礼物
  17. HIT CSAPP程序人生大作业
  18. 转载_树莓派4B的详细资料说明
  19. 谷歌地球飞行模式使用教程
  20. 吉布斯采样——原理及matlab实现

热门文章

  1. zabbix监控 openstack 的实例的资源使用情况
  2. 你可能不知道的跨域解决方案
  3. LLVM完整参考安装
  4. 不同平台下 sleep区别用法
  5. Linux平台Makefile文件的编写基础篇和GCC参数详解
  6. 一个通用Makefile的编写
  7. add_metrology_object_generic将测量对象添加到计量模型中
  8. Variable Assembly Language可变汇编语言
  9. 使用numpy出现DeprecationWarning: The normed argument is ignored when density is provided. 解决方法忽略警告的方法
  10. 【TensorFlow】——实现minist数据集分类的前向传播(常规神经网络非卷积神经网络)