背景

Framework Interoperability Group(框架可互用性小组),简称 FIG,成立于 2009 年。FIG 最初由几位知名 PHP 框架开发者发起,在吸纳了许多优秀的大脑和强健的体魄后,提出了下列 PHP 非官方规范:

PSR-0 (Autoloading Standard) 自动加载标准(主要是针对 PHP 5.3 以前没有命名空间的版本)

PSR-1 (Basic Coding Standard) 基础编码标准

PSR-2 (Coding Style Guide) 编码风格向导

PSR-3 (Logger Interface) 日志接口

PSR-4 (Improved Autoloading) 自动加载优化标准(在出现命名空间后有很大的改变)

PSR-6 (Caching Interface):缓存接口

PSR-7 (HTTP Message Interface):HTTP 消息接口

PSR-5没有出现在以上的列表中,是因为还没有投票通过。其中PSR-0已废弃。详情见:http://www.php-fig.org/psr/。

作用

PSR-1 与 PSR-2主要规范代码编码。

PSR-0 是自动载入的类对应的文件存放路径规范。 PSR-4 称为改进的自动加载规范。官方已废弃PSR-0 规范。

目前很多开源库作者要求新加入的成员遵循PSR规范。所以有必要认真了解,并适当的遵循。

PSR-0与PSR-4

PSR-0有更深的目录结构,比如定义了NS为 Foo\Bar=>vendor\foo\bar\src

use Foo\Bar\Tool\Request调用NS

如果以PSR-0方式加载,实际的目录为vendor\foo\bar\src\Foo\Bar\Tool\Request.php

如果以PSR-4方式加载,实际目录为vendor\foo\bar\src\Tool\Request.php

在PSR-0中目录结构要与命名空间层层对应,无法插入一个单独的目录。Vendor\Package\Class在psr-0会里被直接转换成同样的路径,而PSR-4则没有这样的强制要求。

对比PSR-0,除了PSR-4可以更简洁外,需要注意PSR-0中对下划线(_)是有特殊的处理的,下划线会转换成DIRECTORY_SEPARATOR,这是出于对PHP5.3以前版本兼容的考虑,而PSR-4中是没有这个处理的,这也是两者比较大的一个区别。

此外,PSR-4要求在autoloader中不允许抛出exceptions以及引发任何级别的errors,也不应该有返回值。这是因为可能注册了多个autoloaders,如果一个autoloader没有找到对应的class,应该交给下一个来处理,而不是去阻断这个通道。

PSR-4更简洁更灵活了,但这使得它相对更复杂了。

相关资源

现在写 PHP,你应该知道这些 - Scholer 的 PHP 之路 - SegmentFault

https://segmentfault.com/a/1190000003844380

PHP-FIG — PHP Framework Interop Group

http://www.php-fig.org/

PHP-FIG — PHP 框架互用工作组

http://www.php-fig.org.cn/

php-fig/fig-standards: Standards either proposed or approved by the Framework Interop Group

https://github.com/php-fig/fig-standards

hfcorriez/fig-standards: PHP PSR代码标准中文版

https://github.com/hfcorriez/fig-standards

PHP 基本编码规范--刘小乐

https://github.com/XiaoLer/php-develop-standards/blob/master/php-basic-coding-standard.md

PHP PSR-1 基本代码规范(中文版) - 光头哥 - SegmentFault

https://segmentfault.com/a/1190000002521577

PHP PSR-2 代码风格规范 (中文版) - 光头哥 - SegmentFault

https://segmentfault.com/a/1190000002521620

PHP PSR-3 日志接口规范 (中文版) - 光头哥 - SegmentFault

https://segmentfault.com/a/1190000002521644

PHP PSR-4 Autoloader 自动加载(中文版) - 光头哥 - SegmentFault

https://segmentfault.com/a/1190000002521658

PSR-0与PSR-4区别 - 光头哥 - SegmentFault

https://segmentfault.com/a/1190000002616752

PHP的PSR-0标准利用namespace来做autoloading

http://blog.csdn.net/sky_zhe/article/details/38523145

PHP PSR-4与PSR-0规范 - zHHHe的专栏 - 博客频道 - CSDN.NET

http://blog.csdn.net/sky_zhe/article/details/38615615

PSR规范的更多相关文章

  1. 【PSR规范专题(3)】PSR-2 代码风格规范

    [PSR规范专题(3)]PSR-2 代码风格规范 标签(空格分隔): PHP 转载自:https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-2-cod ...

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

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

  3. PSR规范0-4整理

    PSR规范 psr规范 引言: PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准.这些规范的目的是 ...

  4. 【PSR规范专题(5)】PSR-4 改进后的自动加载规范

    本文转自: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md 关键词 "必须"(&quo ...

  5. 【PSR规范专题(4)】PSR-3 日志接口规范

    本文转自:https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-3-logger-interface-cn.md 本文制定了日志类库的通用接口规范. ...

  6. 【PSR规范专题(2)】PSR-1 基本代码规范

    转载自: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-1-basic-coding-standard-cn.md 基本代码规范 本篇规范制定 ...

  7. 【PSR规范专题(1)】PSR-0+namespace+spl_autoload_register实现框架模型

    了解命名空间 namespace是PHP5.3版本加入的新特性,用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题: 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/ ...

  8. 【PSR规范专题(6)】PSR-7 HTTP消息接口【转】

    PSR-5 和 PSR-6 投票未通过所以直接跳到PSR-7了 本文档描述了在RFC 7230和RFC 7231中被描述来代表HTTP消息通用接口,以及在RFC 3986中规定的URIs语法. HTT ...

  9. PSR规范学习笔记

    PSR已经经历了5次变革,如今PSR4就是最新的标准,但是还是有必要了解下5个版本的内容的,于是去php-fig网站看了下英文原版: 大概看了遍,发现这规范很多的必须很多时候只是建议,但是PHP解析器 ...

随机推荐

  1. Android中的接口回调技术

    Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James ...

  2. 图层的核心动画(CABaseAnimation)续

    Main.storyboard ViewController.m // //  ViewController.m //  8A01.核心动画 // //  Created by huan on 16/ ...

  3. HP iLo2 试用序列号

    HP iLo2 试用序列号 2 条回复 32Q8W-GKHTR-NPDKY-5CD79-T525H hp的ilo2功能实在太有用了,不用往那个恶劣的机房跑了,系统重装也直接远程完成. 这个试用序列号用 ...

  4. 手机移动端confirm替换方案

    //弹框 ;(function () { var ConfirmBox = function (options){ this.defaults = { title:"", topT ...

  5. Poj.Grids 2951 浮点数求高精度幂

    2951:浮点数求高精度幂 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个实数 R ( 0.0 < R < 99.999 ) ,要求写程序精确计算 R 的 n 次方. ...

  6. link2001错误无法解析外部符号metaObject

    http://blog.sina.com.cn/s/blog_791f544a0100r01b.html     1>MainWindowBottomWidget.obj : error LNK ...

  7. Pair Project:电梯控制程序

    12061160刘垚鹏 & 12061166宋天舒 1.1结对编程的优缺点结对编程相对于个人编程有很多优点.首先,督促作用,在讨论过程中能够很快投入工作,为了不耽误对方时间,我们会尽快完成各自 ...

  8. 屏幕适配1(Android 增强版百分比布局库 为了适配而扩展)

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/46767825: 本文出自:[张鸿洋的博客] 这篇博文写得太好了,让我很激动,分 ...

  9. Android--短信

    1.Android 提供一系列 API,可以是我们在自己的程序中发送和接收短信: 2.接收短信: 1)当手机接收到一条短信时,系统会发出一条值为 android.provider.Telephony. ...

  10. explode,split,preg_split性能比较

      explode,split,preg_split性能比较 分类: php2012-07-12 09:46 1109人阅读 评论(1) 收藏 举报 三个函数都是用来对字符串进行分割,下面分几个实验来 ...