psr规范

psr规范

PSR是由FIG这个组织制定的PHP规范,官网是 www.php-fig.org

1.PSR-0:自动加载
PSR-0 是FIG出的第一套规范,主要是制定了一些自动加载标准。不过 PSR-0 已经被标记为 Deprecated(已弃用),自动加载的新规范为 PSR-4

2.PSR-1:基本代码规范
PSR-1 规范包括了一些为确保共享PHP代码之间高水平的技术互操作性所需的标准编码元素。

PHP源文件必须只使用<?php和<?=这两种标签。
源文件中php代码的编码格式必须是不带字节顺序标记(BOM)的UTF-8。
一个源文件建议只用来做声明(类、函数、常量等)或者只用来做一些引起副作用的操作(例如:输出信息、修改.ini配置等),但不建议同时做这两件事。
命名空间(namespace)和类(class)必须遵守PSR-0/PSR-4自动加载标准。
类名必须使用骆驼式(StudlyCaps)写法 (注:驼峰式的一种变种)。
类中的常量必须只由大写字母和下划线组成。
方法名必须使用驼峰式(camelCase)写法。

3.PSR-2:代码样式
PSR-2 是对 PSR-1 规范的补充和扩展,主要是用于约束代码风格,多人协作开发时统一代码风格是很重要的。

代码必须遵循 PSR-1 的基本代码规范。
必须使用4个空格来缩进,不能使用Tab键。
一行代码的长度不得有硬性限制,软限制必须是120字符,建议是最多80个字符。
在namespace声明之后必须有一个空行,并且在use声明块之后必须有一个空行。
声明类、方法的花括号必须单独写在一行。
必须在所有属性和方法上声明可见性(public/protected/private),abstract和final必须在可见性之前声明,static必须在可见性之后声明。
控制结构关键字,就是 if else while switch foreach等,后面必须要有一个空格。
控制结构的左花括号必须与控制关键字在同一行,右花括号必须单独写在一行。


3.PSR-3:日志接口
PSR-3 规范描述的是日志库的通用接口,主要目标是允许库以简单和通用的方式接收PsrLogLoggerInterface对象并将日志写入其中。

Basics
接口LoggerInterface暴露了8个方法,用于写8种级别的日志,包括debug,info,notice,warning,error,critical,alert,emergency。
第九个方法log($level, $message, $context),根据$level参数调用特定日志级别的方法,如果传入的日志 level 不存在,必须抛出一个PsrLogInvalidArgumentException异常。
Message
每个方法都接受一个字符串作为消息,或一个带有__toString()方法的对象。实现者可以对该入参进行特殊处理,最后必须都转换为字符串。
$message中可以包含占位符,实现时可以用$context数组中的值替换。
占位符名称必须是$context数组中的键;
占位符必须用花括号{}括起来,占位符名称与花括号之间不能再有空格;
占位符名字应该只由大小写字母、数字、下划线、点组成。
Context
每个方法都接受一个$context数组作为上下文数据,该数组可以包含任何内容。


4.PSR-4:自动加载
PSR-4 规范了如何从文件路径自动加载类,同时规范了自动加载文件的位置。

术语class指的是类,接口,trait,和其他类似结构。
一个完全限定类名具有以下形式:<NamespaceName>(<SubNamespaceNames>)*<ClassName>
必须具有顶级命名空间,也称为vendor namespace;
可能具有一个或多个子命名空间;
下划线(_)没有任何特殊含义;
必须区分大小写。
加载一个完全限定类名对应的文件时:
在完全限定类名中, 不包含前面的命名空间分隔符,由一个顶级命名空间与一个或多个二级命名空间名称组成的命名空间前缀,对应于至少一个“base目录”;
在命名空间前缀后面的二级命名空间名称对应于“base目录”中的一个子目录, 这里命名空间分隔符表示目录分隔符。子目录名称必须匹配到二级命名空间名称;
最后的类名对应于以.php为后缀的文件名,且大小写也要相同。
自动加载的实现一定不能抛出异常,一定不能引发任何级别的错误, 并且不应该有返回值。


5.控制结构

  • 控制结构的关键词之后必须有一个空格。
  • 控制结构的左括号之后不可有空格。
  • 控制结构的右括号之前不可有空格。
  • 控制结构的右括号和左花括号之间必须有一个空格。
  • 控制结构的代码主体必须进行一次缩进。
  • 控制结构的右花括号必须主体的下一行。

6. if,elseif,else
下面是一个if条件控制结构的示例,注意其中括号,空格和花括号的位置。同时注意else和elseif要和前一个条件控制结构的右花括号在同一行

<?php
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}

通常还有以下几点需要注意

对于php文件:

所有的php文件都必须以Unix LF(换行)作为结束符
所有的php文件都必须以一个单独的空行结尾
纯PHP代码源文件的关闭标签?>必须省略
关键字和 True/False/Null

php的关键字,必须小写
php产量 true ,false,null也必须小写
命名空间

命名空间(namespace)的声明后面必须有一行空行。
所有的导入(use)声明必须放在命名空间(namespace)声明的下面。
一句声明中,必须只有一个导入(use)关键字。
在导入(use)声明代码块后面必须有一行空行。

7.IDE中的格式化

可以通过在PhpStorm中配置,快速格式化,现在基本都遵循PSR-12的规范(最好是phpstorm2020.1以上的版本,之前的版本只能配置PSR1/PSR2)

参考链接:
https://blog.csdn.net/lisonglisonglisong/article/details/81238893
https://blog.csdn.net/zhaoxuejie/article/details/52242140

原文地址:https://www.cnblogs.com/hld123/p/13957405.html