文章目录
参考文档
什么是PSR?
PSR:PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。
PSR-0: 自动加载规范
PSR-0已经废弃,被PSR-4代替
PSR-1:基础编码规范
- PHP代码文件 必须 以 <?php 或 <?= 标签开始
- PHP代码文件 必须 以 不带 BOM 的 UTF-8 编码
- 类的命名 必须 遵循 StudlyCaps 大写开头的驼峰命名规范
- 命名空间以及类 必须 符合 PSR 的自动加载规范
- 类中的常量所有字母都 必须 大写,单词间用下划线分隔
- 方法名称 必须 符合 camelCase 式的小写开头驼峰命名规范
<?php
class PeopleActivity{
protected $contentType = 'application/json';
public function peopleEating(){
}
}
PSR-2: 编码风格规范
- 代码 必须 遵循 PSR-1 中的编码规范
- 代码 必须 使用4个空格符而不是「Tab 键」进行缩进
- 每个 namespace 命名空间声明语句和 use 声明语句块后面,必须 插入一个空白行。
- 类的开始花括号({) 必须 写在函数声明后自成一行,结束花括号(})也 必须 写在函数主体后自成一行。
- 方法的开始花括号({) 必须 写在函数声明后自成一行,结束花括号(})也 必须 写在函数主体后自成一行。
- 类的属性和方法 必须 添加访问修饰符(private、protected 以及 public),abstract 以及 final 必须 声明在访问修饰符之前,而 static 必须 声明在访问修饰符之后。
<?php
namespace think\session\driver;
//空一行
use SessionHandler;
use think\Exception;
//空一行
class Redis extends SessionHandler
{ // {另起行
protected $handler = null;
protected $config = [
'host' => '127.0.0.1', // redis主机
'port' => 6379, // redis端口
'password' => '', // 密码
'select' => 0, // 操作
];
public function __construct($config = [])
{ // {另起行
$this->config = array_merge($this->config, $config);
} // }另起行
abstract/final public/protected/private static function bar()
{
//
}
} // }另起行
-
每行的字符数 应该 软性保持在 80 个之内,理论上 一定不可 多于 120 个,但 一定不可 有硬性限制。
-
控制结构的关键字后 必须 要有一个空格符,而调用方法或函数时则 一定不可 有
-
控制结构的开始花括号(){ 必须 写在声明的同一行,而结束花括号}() 必须 写在主体后自成一行
-
控制结构的开始左括号后和结束右括号前,都 一定不可 有空格符。
<?php
//if关键词后跟空格
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
do {
// structure body;
} while ($expr);
PSR-3:日志接口规范
PSR-4:自动加载规范
-
此处的「类」泛指所有的「Class类」、「接口」、「traits 可复用代码块」以及其它类似结构。
-
一个完整的类名需具有以下结构: <命名空间>(<子命名空间>)*<类名>
-
完整的类名 必须 要有一个顶级命名空间,被称为 “vendor namespace”;
-
完整的类名 可以 有一个或多个子命名空间;
-
完整的类名 必须 有一个最终的类名;
-
完整的类名中任意一部分中的下滑线都是没有特殊含义的;
-
完整的类名 可以 由任意大小写字母组成;
-
所有类名都 必须 是大小写敏感的。
- 当根据完整的类名载入相应的文件
-
完整的类名中,去掉最前面的命名空间分隔符,前面连续的一个或多个命名空间和子命名空间,作为「命名空间前缀」,其必须与至少一个「文件基目录」相对应;
-
紧接命名空间前缀后的子命名空间 必须 与相应的「文件基目录」相匹配,其中的命名空间分隔符将作为目录分隔符。
-
末尾的类名 必须 与对应的以 .php 为后缀的文件同名。
-
自动加载器(autoloader)的实现 一定不可 抛出异常、一定不可 触发任一级别的错误信息以及 不应该 有返回值。