1. 概览

  • PHP代码文件必须以 <?php<?= 标签开始;
  • PHP代码文件必须以 不带BOM的 UTF-8 编码;
  • PHP代码中应该只定义类、函数、常量等声明,或其他会产生 从属效应 的操作(如:生成文件输出以及修改.ini配置文件等),二者只能选其一;
  • 命名空间以及类必须符合 PSR 的自动加载规范: PSR-4 ;
  • 类的命名必须遵循 StudlyCaps 大写开头的驼峰命名规范;
  • 类中的常量所有字母都必须大写,单词间用下划线分隔;
  • 方法名称必须符合 camelCase 式的小写开头驼峰命名规范
  • 代码必须使用4个空格符而不是 tab键 进行缩进。
  • 每行的字符数应该软性保持在80个之内,理论上一定不可多于120个,但一定不能有硬性限制。
  • 每个 namespace命名空间声明语句和 use 声明语句块后面,必须插入一个空白行。
  • 类的开始花括号( { )必须写在函数声明后自成一行,结束花括号( } )也必须写在函数主体后自成一行。
  • 方法的开始花括号( { )必须写在函数声明后自成一行,结束花括号( } )也必须写在函数主体后自成一行。
  • 类的属性和方法必须添加访问修饰符(privateprotected 以及 public), abstract 以及 final 必须声明在访问修饰符之前,而 static 必须声明在访问修饰符之后。
  • 控制结构的关键字后必须要有一个空格符,而调用方法或函数时则一定不能有。
  • 控制结构的开始花括号( { )必须写在声明的同一行,而结束花括号( } )必须写在主体后自成一行。
  • 控制结构的开始左括号后和结束右括号前,都一定不能有空格符。

2. 文件

2.1. PHP标签

PHP代码必须使用 <?php ?> 长标签 或 <?= ?> 短输出标签;
一定不可使用其它自定义标签。

2.2. 字符编码

PHP代码必须且只可使用不带BOM的UTF-8编码。

2.3. PHP文件

  • 所有PHP文件必须使用Unix LF (linefeed)作为行的结束符。
  • 所有PHP文件必须以一个空白行作为结束。
  • 纯PHP代码文件必须省略最后的?> 结束标签

2.4. 行

  • 行的长度一定不能有硬性的约束。
  • 软性的长度约束一定要限制在120个字符以内,若超过此长度,带代码规范检查的编辑器一定要发出警告,不过一定不可发出错误提示。
  • 每行不应该多于80个字符,大于80字符的行应该折成多行。
  • 非空行后一定不能有多余的空格符。
  • 空行可以使得阅读代码更加方便以及有助于代码的分块。
  • 每行一定不能存在多于一条语句。

2.5. 缩进

代码必须使用4个空格符的缩进,一定不能用 tab键 。

2.6. 关键字以及True/False/Null

  • PHP所有 关键字必须全部小写。
  • 常量truefalsenull 也必须全部小写。

2.7. 从属效应

一份PHP文件中应该要不就只定义新的声明,如类、函数或常量等不产生从属效应的操作,要不就只有会产生从属效应的逻辑操作,但不该同时具有两者。
“从属效应”(side effects)一词的意思是,仅仅通过包含文件,不直接声明类、函数和常量等,而执行的逻辑操作。
“从属效应”包含却不仅限于:生成输出、直接的 require 或 include、连接外部服务、修改 ini 配置、抛出错误或异常、修改全局或静态变量、读或写文件等。
以下是一个反例,一份包含声明以及产生从属效应的代码:

<?php
// 从属效应:修改 ini 配置
ini_set('error_reporting', E_ALL);// 从属效应:引入文件
include "file.php";// 从属效应:生成输出
echo "<html>\n";// 声明函数
function foo()
{// 函数主体部分
}
下面是一个范例,一份只包含声明不产生从属效应的代码:
<?php
// 声明函数
function foo()
{// 函数主体部分
}// 条件声明**不**属于从属效应
if (! function_exists('bar')) {function bar(){// 函数主体部分}
}

3. 命名空间和类

根据规范,每个类都独立为一个文件,且命名空间至少有一个层次:顶级的组织名称(vendor name)。
类的命名必须 遵循 StudlyCaps 大写开头的驼峰命名规范。
PHP 5.3及以后版本的代码必须使用正式的命名空间。

例如:

<?php
// PHP 5.3及以后版本的写法
namespace Vendor\Model;class Foo
{}
5.2.x及之前的版本应该使用伪命名空间的写法,约定俗成使用顶级的组织名称(vendor name)如 Vendor_ 为类前缀。
<?php
// 5.2.x及之前版本的写法
class Vendor_Model_Foo
{}

3.1. Namespace以及use声明

  • namespace 声明后 必须 插入一个空白行。
  • 所有use 必须 在 namespace后声明。
  • 每条use声明语句 必须 只有一个use 关键词。
  • use声明语句块后 必须 要有一个空白行。

例如:

<?php
namespace Vendor\Package;use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

4. 类、常量、属性和方法

4.1. 扩展与继承

关键词 extendsimplements必须写在类名称的同一行。
类的开始花括号必须独占一行,结束花括号也必须在类主体后独占一行。

<?php
namespace Vendor\Package;use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;cla

Psr(psr1+psr2+psr3)相关推荐

  1. PHP的PSR推荐规范,PSR-1,PSR-2,PSR-3,PSR-4详解

    PHP的PSR推荐规范,PSR-1,PSR-2,PSR-3,PSR-4详解 PSR是php standards recommendation(php推荐标准)的简称.PHP-FIG制定了每个推荐的规范 ...

  2. PSR规范 (psr-0,psr-1,psr-2,psr-3,psr-4)

    这个规范,我只有在海康威视面试的时候碰到.不过还是很重要的.记录一下 简单总结,方便记忆.04是自动加载的规范, 12是代码规范, 3是日志规范,后面的数字就是升级版 PSR 是 PHP Standa ...

  3. cotex单片机寄存器(cm3为例)

     ARM单片机寄存器列表: 堆栈指针 R13   R13 是堆栈指针.在 CM3 处理器内核中共有两个堆栈指针,于是也就支持两个堆栈. 当引用 R13(或写作 SP)时,你引用到的是当前正在使用的那一 ...

  4. 语义角色标注 Semantic Role Labeling(SRL) 初探(整理英文tutorial)

    语义角色标注 本文链接 最近调研了一下语义角色标注,记录如下 将语言信息结构化,方便计算机理解句子中蕴含的语义信息. 语义角色标注 (Semantic Role Labeling, SRL) 是一种浅 ...

  5. PHP规范PSR13(链接定义接口)介绍

    在HTML上下文和各种API格式上下文中,超媒体链接正变得越来越重要.但是,没有单一的常见超媒体格式,也没有一种通用的方式来表示格式之间的链接. 该规范旨在为PHP开发人员提供一种简单,通用的方式来表 ...

  6. 2023年“华数杯”国际数学建模比赛ICM-问题B:社会稳定预警研究背景-多思路详解(含代码/数据)

    一.题目翻译 背景: 人类和所有动物一样,有寻求优势和避免伤害的本能.人类成为创造之王的关键在于,他们比其他动物更善于避免伤害.危机总是潜伏在未来.人类发展史是一部不断试图超越危机的历史(阎耀军,20 ...

  7. springboot设置文件上传大小(tomcat默认1M)

    application.yml # 设置文件上传大小(tomcat默认1M) server:tomcat:max-http-form-post-size: -1 spring:servlet:mult ...

  8. 十大算法,描述+代码+演示+分析+改进(赶紧收藏!)

    十大算法 1.冒泡排序 ​ (1)算法描述 ​ 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...

  9. 后端怎么防止重复提交?(常用的做法)

    后端怎么防止重复提交?(常用的做法) 客户端的抖动,快速操作,网络通信或者服务器响应慢,造成服务器重复处理.防止重复提交,除了从前端控制,后台也需要控制.因为前端的限制不能解决彻底.接口实现,通常要求 ...

最新文章

  1. 11、Kubernetes集群安全机制
  2. 英特尔全新CPU和Xe独立显卡亮相,这次它把牙膏“挤爆了”
  3. Docker(四):使用Docker部署tomcat、mysql、nginx静态服务器
  4. Oracle之数据库设计概述
  5. hotspot jvm_在Hotspot JVM中跟踪过多的垃圾收集
  6. JAVA 基础3-数组
  7. 怎么查看父子级目录linux,如何查找linux中特定父目录的所有文件?
  8. 《HTML5与CSS3实战指南》——第2章 HTML5样式的标记2.1 The HTML5 Herald简介
  9. 将自己的dcm数据制作成LUNA16数据集提供数据样式。
  10. genlist -s 192.168.21.\*
  11. Starling GodRay 效果实现
  12. go项目新增一个代码文件
  13. Hybrid Astar 算法剖析和实现(一)
  14. FFmpeg 转码压缩
  15. python图像识别与提取_python图像识别与提取
  16. 系统重启后接口代理服务器ip地址会变,重启路由器可以IP会变吗
  17. 典型无线复习资料---有这不怕挂科
  18. 服务器(工作站)与普通电脑的区别?
  19. 爱奇艺2018届C++校招笔试
  20. C语言之动态分配内存

热门文章

  1. 富文本框KindEditor的使用技巧
  2. 公司绩效考评系统 -- 数据库设计, 接口方法
  3. JavaScript 节点概述 、父节点 parentNode、子节点children、兄弟节点、创建节点 添加节点、删除节点、复制拷贝节点 ★案例★
  4. WebService开发教程
  5. vs 删除不要的库文件、lib等信息
  6. AcWing:哈希表
  7. awstats mysql_awstats显示国家和IP
  8. 天九共享集团戈峻:培育企业家精神
  9. CSS学习笔记10:超链接样式
  10. mysql months_between_months_between()用法