PSR已经经历了5次变革,如今PSR4就是最新的标准,但是还是有必要了解下5个版本的内容的,于是去php-fig网站看了下英文原版;

大概看了遍,发现这规范很多的必须很多时候只是建议,但是PHP解析器在解析PHP代码时,有时如果不满足规范,就不会通过或者报错。因此写代码时建议尽量以PSR标准来编写,毕竟一个规范的出台,有其重要的现实意义,同时最大的好处是能避免不必要的异常出现;

当然,除此之外,另一个收获是,对框架源码的布局有了更加清晰的了解,所以建议大家有事没事都要把下面几个标准看看,推荐看英文版。(而下面我的笔记只是我比较关注的地方)

如下是PSR五个标准的英文网页: 
http://www.php-fig.org/psr/psr-0/ 
http://www.php-fig.org/psr/psr-1/ 
http://www.php-fig.org/psr/psr-2/ 
http://www.php-fig.org/psr/psr-3/ 
http://www.php-fig.org/psr/psr-4/


PSR-0标准

该标准已经在2014/10/21日被明确宣布废除,取而代之的是PSR-4标准; 
大纲如下: 
(1) 每一个namespace和class必须是如此命名的:

<vendor name>\(<namespace>\)*<class name>
  • 1

(2) 每一个命名空间必须有一个顶级的namespace(vendor name); 
(3) 每一个命名空间都必须有一个或多个子命名空间; 
(4) 当加载文件时,namespace中的每一个分隔符”\”都会被文件系统的文件分隔符替换; 
(5) 当加载文件时,namespace中的每一个下滑线”_”都会被文件系统的文件分隔符替换; 
(6) 当加载文件时,在替换后,将在namespace后添加.php来查找文件; 
(7) vendor,namespace,class的命名用大小写字母组合而成;


PSR-1标准

(1) php文件必须使用<?php ?> 开头结尾; 
(2) php文件必须使用没有BOM的UTF-8编码(可我看我的博客“UTF8的编码规则,文件BOM的由来”); 
(3) php编码时应该将无side-effects的代码(如类的声明,函数的声明),和side-effects的代码(改变php环境,改变全局变量,改变数据库),分开文件编写; 
(4) 命名空间和类的定义,必须符合自动加载原则,即每个php文件只能定义一个类,而且其namespace必须至少有一个顶级空间名字vendor-name; 
(5) 类里面的常量,应该用大写字母和下划线组合定义; 
(6) 类里面的属性,命名建议是大小写开头的驼峰型或者小写下划线行,该规则不做强制,但一定的代码范围内建议使用同一种命名方法,便于阅读; 
(7) 方法的命名,建议是小写开头的驼峰型;


PSR-2标准

该标准是继承和拓展了PSR-1标准,是编码的基础标准; 
(1) 代码的缩进必须是4个space,而不是tabs; 
(2) 该标准对代码的行长度没有硬性要求,但是建议一行代码应该小于120个字符或者是少于80个字符; 
(3) namespace和use声明下都应该留有一空行; 
(4) 类的左花括号必须写在类定义的下一行, 右花括号必须在代码体的下一行; 
(5) 方法的花括号规则和类的规则一样; 
(6) 所有属性或者方法必须有可见性声明(public,private .etc),而final和abstract必须放在可见性声明前面,而static必须放在可见性声明之后; 
(7) 控制结构的关键字(if,switch等)后面必须有个空格,而函数名就不需要了; 
(8) 控制结构后面的左花括号必须和控制结构关键字在同一行,右花括号在代码体的下一行; 
(9) 控制结构的左花括号后和右花括号前不能有空格; 
(10) 所有php文件必须使用unix的换行符进行换行; 
(11) 所有php文件结尾必须有一空行; 
(12) php代码结束符”?>”,在只有php代码的文件里必须省略; 
(13) 非空行,不能在后面添加空格; 
(14) php的关键字必须是小写; 
(15) extends和implements必须和类的定义写在同一行; 
(16) 所有函数的定义前必须加可见性声明; 
(17) 函数形参的定义时,每一个参数的前后不能有空格;


PSR-3标准

该标准主要讲述Log体系,暂时放下;

PSR-4标准

该标准主要描述自动加载,兼容PSR-0标准; 
(1) 完整类名格式如下:

\<NamsespaceName>(\<SubNamespaceNames>)*\<ClassName>
  • 1

要点: 
A 必须有一个顶级namespace, 和psr-0时说的Vendor说的是一个东西,这里用“\”符号; 
B 必须有一个或多级namespace; 
C 以类名结束; 
D 下划线不具有独特性(注意和PSR-0区别); 
E 可使用人体大小写; 
F 整个类名对大小写敏感;

(2) 自动加载继承类不能跑出任何异常(exception,throwable,errors)

PSR规范学习笔记的更多相关文章

  1. AMD规范学习笔记

    背景 NodeJS的一套比较简洁 Moudles 规范, 使得在服务器端的模块化变得更加简单.很长一段时间,很多公司或者项目都有自己的一套模块化机制, 却未能形成一套统一的标准, NodeJS的Mou ...

  2. 阿里Java编程规范 学习笔记

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  3. CMD规范学习笔记——基于SEAJS实现

    CMD(Common Module Definition):该规范明确了模块的书写格式和基本交互规则.通常一个模块就是一个JS文件. 通过define关键字来定义模块,最基本的格式为: define( ...

  4. usb2.0 规范学习笔记

    1.一个USB HOST 最多可以同时支持128 个地址,地址0 作为默认地址,只在设备枚举期间临时使 用,而不能被分配给任何一个设备,因此一个USB HOST 最多可以同时支持127 个地址,如果一 ...

  5. CSS规范—分类方法(NEC规范学习笔记)

    一.CSS文件的分类和引用顺序 Css按照性质和用途,将Css文件分成“公共型样式”.“特殊型样式”.“皮肤型样式”,并以此顺序引用,有需要可以添加版本号 1.公共型样式:包含以下几个部分 标签的重置 ...

  6. GP card规范学习笔记

    9.   APDU命令参考 9.1  总的编码规则 A.生命周期状态的编码 可执行的装载文件 b8 b7 b6 b5 b4 b3 b2 b1 含义 16进制命令  0 0 0 0 0 0 0 1 LO ...

  7. 阿里巴巴JAVA开发规范学习笔记

    一.编程规约 (一)命名规约 1.类名驼峰.领域模型除外VO.BO.DTO.DO统称POJO 4.数组String[] args 8.枚举类 Enum ,其实就是特殊的常量类,构造方法强制私有 ( 二 ...

  8. java虚拟机规范学习笔记之数据类型

    1.1 class文件格式 编译后被Java虚拟机所执行的代码使用了一种平台中立的二进制格式来表示,并且经常以文件的形式来存储,这种格式称为class文件格式.class文件格式中精确的定义了类与接口 ...

  9. XML学习笔记(二)-- DTD格式规范

    标签(空格分隔): 学习笔记 XML的一个主要目的是允许应用程序之间自由交换结构化的数据,因此要求XML文档具有一致的结构.业务逻辑和规则.可以定义一种模式来定义XML文档的结构,并借此验证XML文档 ...

随机推荐

  1. C# WPF打包部署时添加注册表信息实现开机启动

    使用VS自带的打包模块可以很方便的对项目进行打包部署,同时我们也可以在安装部署时操作注册表实现开机启动软件.具体实现如下: 创建安装部署这部分就不用说了,添加安装部署项目后,鼠标右键安装项目-> ...

  2. MySql通用二进制版本在Linux(Ubuntu)下安装与开启服务

    安装mysql前可能需要其他软件的依赖,请先执行下面命令安装mysql的依赖软件 shell> apt-cache search libaio # search for info shell&g ...

  3. 资源在Windows编程中的应用

    学习目的 掌握菜单和对话框资源的创建和使用. 编写程序: 设计一个窗口应用程序, 其中有一个VC菜单, 该菜单下有"显示", "隐藏", "退出&qu ...

  4. html 里面的 role 属性是什么意义和用途

    使用role属性告诉辅助设备(如屏幕阅读器)这个元素所扮演的角色,属于WAI-ARIA. 例如点击的按钮,就是role="button":会让这个元素可点击:本质上是增强语义性,当 ...

  5. 自动化构建工具--gulp的初识和使用

    gulp 首先:什么是gulp? gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我 ...

  6. hexo的next主题个性化教程:打造炫酷网站

    看到有些next主题的网站很炫酷,那么是怎么配置的呢?接下来我会讲一讲如何实现一些炫酷的效果 主要有以下32种: 在右上角或者左上角实现fork me on github 添加RSS 添加动态背景 实 ...

  7. 简单的PHP的任务队列

    文章太长,不作过多介绍,反正,文章的头部就说明了大概的意思...原文如下:写了一个简单的队列任务处理.多进程任务,异步任务可能会用到这个(主要是命令行应用)比如,任务的某个一个环节速度十分不稳定,可能 ...

  8. [微信小程序] 微信小程序富文本-wxParse的使用

    最近小程序蛮火的,公司要做于是学了一点点小程序 不知道你们有没有遇到过这种问题: 从公司服务器获取的文章内容是有HTML标签格式的一段内容,但是微信是不支持这些标签的,怎么办呢? 1.一般网站后台的文 ...

  9. 移动端地区选择mobile-select-area插件的使用方法

    顾名思义,mobile-select-area插件就是使用在移动端上的进行地区选择的插件,而且使用方法简单,我就说我是怎么用的吧 一.准备工作 首先肯定要下载插件对应的css+js文件, 当你下载好这 ...

  10. ArcGIS10.3+Oracle12C+ArcGIS Server10.3安装布署(之二)

    1.创建PDB 输入 dbca 命令 2.安装完成后,连接PDBSDE的容器数据库 3.环境变量 从Oracle的官方网站下载   instantclient-basic-nt-12.1.0.2.0. ...