PSR规范
背景
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规范的更多相关文章
- 【PSR规范专题(3)】PSR-2 代码风格规范
[PSR规范专题(3)]PSR-2 代码风格规范 标签(空格分隔): PHP 转载自:https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-2-cod ...
- 「PSR 规范」PSR-2 编码风格规范
所有 PSR 规范请见:https://learnku.com/docs/psr https://learnku.com/laravel/t/2079/psr-specification-psr-2 ...
- PSR规范0-4整理
PSR规范 psr规范 引言: PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准.这些规范的目的是 ...
- 【PSR规范专题(5)】PSR-4 改进后的自动加载规范
本文转自: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md 关键词 "必须"(&quo ...
- 【PSR规范专题(4)】PSR-3 日志接口规范
本文转自:https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-3-logger-interface-cn.md 本文制定了日志类库的通用接口规范. ...
- 【PSR规范专题(2)】PSR-1 基本代码规范
转载自: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-1-basic-coding-standard-cn.md 基本代码规范 本篇规范制定 ...
- 【PSR规范专题(1)】PSR-0+namespace+spl_autoload_register实现框架模型
了解命名空间 namespace是PHP5.3版本加入的新特性,用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题: 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/ ...
- 【PSR规范专题(6)】PSR-7 HTTP消息接口【转】
PSR-5 和 PSR-6 投票未通过所以直接跳到PSR-7了 本文档描述了在RFC 7230和RFC 7231中被描述来代表HTTP消息通用接口,以及在RFC 3986中规定的URIs语法. HTT ...
- PSR规范学习笔记
PSR已经经历了5次变革,如今PSR4就是最新的标准,但是还是有必要了解下5个版本的内容的,于是去php-fig网站看了下英文原版: 大概看了遍,发现这规范很多的必须很多时候只是建议,但是PHP解析器 ...
随机推荐
- Linux echo, sort, sed 等一些命令总结
linux echo, sort, sed是初学linux shell script 的一些常用的命令.基本上来说,如果能够掌握了这些命令,我们就能写出一些不错的linux脚本.以下是我遇到的以下常用 ...
- LR11录制脚本时打不开浏览器,如何解决?
请教一下各位大神,我安装的LR11,在录制脚本的时候打不开浏览器,已经试过了网上的方法还是不行,以下是搜到的方法: 无法打开IE的主要原因是,LR的注册信息被修改了,所以无法找到IE的路径. 解决这个 ...
- 在app中打开appStore中其他app
var str = "https://itunes.apple.com/cn/app/zhang-jiange-hao-tou-zi-ke/id402382976?mt=8"//这 ...
- 错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
不知怎么本来编译好好的VS2010环境,忽然出现“转换到 COFF 期间失败: 文件无效或损坏”的链接错误.花了好多天,试了好多方法,最终解决了这个问题. 现在罗列一下这几种解决方案: 方案1:点击“ ...
- spring4+hibernate4+maven环境搭建
本文主要介绍利用maven搭建spring4+hibernate4开发环境. 首先我们创建一个maven项目,具体步骤就不详细介绍了,看看我们pom.xml文件 <project xmlns=& ...
- AppFuse3.5对接oracle数据库
AppFuse是一个使用Java语言开发web应用系统的集成框架.java开发人员最头痛的事情就是面对大量的框架不知该如何选择.这些框架性能如何,兼容性如何等等都需要筛选比较.Appfuse作者Mat ...
- Django-简单项目创建
在磁盘中找到需要存放项目代驾的目录,进入该目录(本机为: /Downloads/All) 输入Django创建项目命令:django-admin startproject mysite,此时在目录下会 ...
- html form 提交表单的一些问题
1. 如果在一个form里有summit按钮,则只能提交本form的内容
- HDU 1010 Tempter of the Bone
题意:从开始位置走到结束位置,恰好走 t 步 YES 否则 NO 搜索题,由于是恰好走到,所以用到了奇偶剪枝 什么是奇偶剪枝,我也是刚知道 所给步数为 t ,起始位置坐标 (begin_x,begin ...
- C语言-数据类型
数据类型 -基本数据类型 --char 字符型 --int 整型 --浮点型 ---float ---double -指针类型 --void* -空类型 -构架类型 --数组[] --结构体 str ...