背景

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照片墙加强版,使用ViewPager实现画廊效果

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12646775 记得关于照片墙的文章我已经写过好几篇了,有最基本的照片墙,有瀑布流模 ...

  2. SQLiteHelper

    /** * 实现对表的创建.更新.变更列名操作 * * */ public class SQLiteHelper extends SQLiteOpenHelper { public static fi ...

  3. 实验 2 用C语言编写简单程序

    #include<stdio.h> int main() { int x,y; printf("enter x:"); scanf("%d",&am ...

  4. 使用内存虚拟硬盘 提高ArcGIS server并发性能的一种方法

    1 问题提出 1.1 概述 提高ArcGIS server并发性能的方法很多,本文讨论在用户硬件足够强大的情况下(主要是内存足够大),使用内存模拟硬盘来提高数据的读取效率,以达到提高ArcGIS se ...

  5. (bzoj2330)糖果

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MB Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋 ...

  6. 配置MySQL数据库

    一.配置MySQL数据库 1.解压绿色版mysql,如下图 二.安装服务 1.运行cmd(管理员版本,否则没有权限),如下图 2.运行命令mysqld –install安装服务,如下图: 如果不需要m ...

  7. RocksDB笔记 - Compaction中的Iterator

    Compaction中的Iterator 一般来说,Compaction的Input涉及两层数据的合并,对于涉及到的每一层数据: 如果是level-0,对level-0的每一个sstable文件建立一 ...

  8. 第五章:Logistic回归

    本章内容 □sigmod函数和logistic回归分类器 □最优化理论初步□梯度下降最优化算法□数据中的缺失项处理 这会是激动人心的一章,因为我们将首次接触到最优化算法.仔细想想就会发现,其实我们日常 ...

  9. 高等微积分及其应用 nicholas.pdf——下载地址

    http://pan.baidu.com/share/link?shareid=426414429&uk=3977204074 这本书在网络上很少有了,本人是在群里下过来整理成一个文档了,由n ...

  10. Oracle学习笔记1

    查看登录用户 show user; 启用scott用户 alter user scott account unlock; 操作表空间 select * from dba_tablespaces; se ...