php中PSR-[0-4]代码规范学习记录

php中PSR-[0-4]代码规范学习记录

1. PSR是什么?

PSR是一套代码编写规范,用于约束代码风格。以前没有规范的时候大家都是按照自己的习惯来书写代码,但每个人风格不一样,你的代码在别人看来就是很不爽。而且会导致许多问题:
function 函数名是否驼峰命名,
花括号{}是否换行写,
是该写注释呢还是不写
变量名是大写还是小写,
一个php文件中是一个类好还是允许有多个
所以PSR-[0-4]规范就应运而生,大家都共同遵守,就没有风格差异了。
PSR是由PHP-FIG这个组织发明的,FIG 是 Framework Interoperability Group(框架可互用性小组)的缩写。PSR是Proposing a Standards Recommendation(提出标准建议)的缩写。截止到目前为止,总共有5套PSR规范,分别是:

PSR-0 (Autoloading Standard) 自动加载标准
PSR-1 (Basic Coding Standard) 基础编码标准
PSR-2 (Coding Style Guide) 编码风格向导
PSR-3 (Logger Interface) 日志接口
PSR-4 (Improved Autoloading) 自动加载的增强版,可以替换掉PSR-0了。

2. 规范的使用和定义

1. PSR-0规范

PSR-0是第一套规范,主要用于规范自动加载,不过现在已经过时了,被PSR-4规范替代了。
PSR-0强制性要求几点:

1. 一个完全合格的namespace和class必须符合这样的结构:“\< Vendor Name>(< Namespace>)*< Class Name>”
2. 每个namespace必须有一个顶层的namespace("Vendor Name"提供者名字)
3. 每个namespace可以有多个子namespace
4. 当从文件系统中加载时,每个namespace的分隔符(\)要转换成 DIRECTORY_SEPARATOR(操作系统路径分隔符)
5. 在类名中,每个下划线(_)符号要转换成DIRECTORY_SEPARATOR(操作系统路径分隔符)。在namespace中,下划线(_)符号是没有(特殊)意义的。
6. 当从文件系统中载入时,合格的namespace和class一定是以 .php 结尾的
7. verdor name,namespaces,class名可以由大小写字母组合而成(大小写敏感的)
第一条: 一个完全合格的namespace和class必须符合这样的结构:“< Vendor Name>(< Namespace>)*< Class Name>”

假如我的文件路径为Lib/Driver/Config.php,那么我的namespace的申明和使用为:

申明:namespace \Lib\Driver;
使用:use \Lib\Driver\Config;
第二三条:每个namespace必须有一个顶层的namespace("Vendor Name"提供者名字),每个namespace可以有多个子namespace
namespace \Lib\Driver\Config->/path/to/vender/Lib/Driver/Config.php

Lib就是顶层namespace,Driver就是子namespace/

第四条:当从文件系统中加载时,每个namespace的分隔符()要转换成 DIRECTORY_SEPARATOR(操作系统路径分隔符)
new \Lib\Driver\Config->转换的目录为/Lib/Driver/Config.php,替换反斜杠为目录分隔符
第五条:在类名中,每个下划线(_)符号要转换成DIRECTORY_SEPARATOR(操作系统路径分隔符)。在namespace中,下划线(_)符号是没有(特殊)意义的
\Lib\Driver\Class_Name->转换为目录为/Lib/Driver/Class/Name.php
\Lib\Package_Name\Class_Name->转换为目录为/Lib/Package_Name/Class/Name.php

目录中的_就是下划线,classname中的下划线实际上会转为成路径分隔符。

但这个规定在PSR-4中已经取消了,不再需要转换了。
第六条:当从文件系统中载入时,合格的namespace和class一定是以 .php 结尾的

加载的文件必须是.php结尾,既然使用php当然是.php结尾了。不再像以前那样有什么php3,php5

第七条:verdor name,namespaces,class名可以由大小写字母组合而成(大小写敏感的)

由于Liunx是区分大小写的,而windows是不区分大小写的,所以如果不注意大小写在win下正常开发,但是到了服务器上可能就无法正常执行了。

2. PSR-1规范

要求:

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

因为php有4种标签形式,所以这里规定了使用哪一种,统一规范。

第二条:源文件中php代码的编码格式必须是不带字节顺序标记(BOM)的UTF-8

windows笔记本默认是会在文件头部加入BOM头的,会导致在服务器上输出的很奇怪。
国内的中文编码是GBK,UTF-8是国际通用编码,不统一的话也会导致乱码。

第三条:一个源文件建议只用来做声明(类(class),函数(function),常量(constant)等)或者只用来做一些引起副作用的操作(例如:输出信息,修改.ini配置等),但不建议同时做这两件事。

不要在一个文件中又是定义函数又是修改系统配置的,一个文件只做一件事。

// 副作用:修改了ini配置
ini_set('error_reporting', E_ALL);
// 副作用:载入了文件
include "file.php";
// 副作用:产生了输出
echo "<html>\n";
// 声明 function
function foo()
{
    // 函数体
}

分开写

// 声明 function
function foo()
{
    // 函数体
}
// 副作用:修改了ini配置
ini_set('error_reporting', E_ALL);
// 副作用:载入了文件
include "file.php";

这样就很整齐。

第四条:命名空间(namespace)和类(class) 必须遵守PSR-0标准

参见PSR-0标准

第五条:类名(class name) 必须使用骆驼式(StudlyCaps)写法 (注:驼峰式(cameCase)的一种变种,后文将直接用StudlyCaps表示)。

类名必须使用驼峰命名,大驼峰小驼峰都可以。

<?php
class BigHouse{
   
}
第六条:类(class)中的常量必须只由大写字母和下划线(_)组成。
<?php
class Test{
   
	const USER_INFO = 'xx';
	const NAME = 'xx';
}
第七条:方法名(method name) 必须使用驼峰式(cameCase)写法。
<?php
class Test{<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值