PSR 是什么,PSR-1, 2, 4, 7

概述

PSR是指PHP Standard Recommendations,是由PHP-FIG(PHP Framework Interop Group)制定的一系列PHP编程规范的推荐标准。

具体来说,PSR-1是PHP基础编码规范,PSR-2是PHP代码风格指南,PSR-4是自动加载标准,PSR-7是HTTP消息接口。

PSR-1包含了一些基础的编码规范,在PHP代码的编写中需要注意的一些事项,例如对文件和类的命名、标记和缩进等。

PSR-2则在PSR-1的基础上提供了更加详细的代码风格建议,例如对缩进、命名空间、类和方法等的规定。

PSR-4规定了如何自动加载PHP类,在PHP应用程序的开发中通常会用到它来解决类自动加载问题。

最后,PSR-7定义了PHP处理HTTP消息的规范,包括了请求、响应和URI等一系列关键元素,这个标准可以用于处理 web 应用以及其他类型的应用中的 HTTP 信息。

 

  1. PSR-1:基础编码规范

PSR-1主要包含以下规范:

  • PHP文件必须只使用<?php<?= ?>标记,而不要使用其他标记如<?
  • PHP文件必须只使用UTF-8无BOM编码。
  • 类名必须遵循StudlyCaps(大小写混合)规范,所有字母均大写开头。
  • 常量名必须完全大写,由单词间的下划线分隔。
  • 方法名必须遵循camelCase(驼峰式的)规范。

下面是一些示例代码:

<?php
// 类名必须遵循StudlyCaps规范
class MyClassName {
    const MY_CONSTANT = 'value';

    // 方法名必须遵循camelCase规范
    public function myMethod() {
        // ...
    }
}
  1. PSR-2:代码风格指南

PSR-2主要包括以下规范:

  • 代码必须使用4个空格的缩进而不是tab键。
  • 对于控制结构(if、else、while等)必须使用大括号 {} ,即使只有一条语句。
  • PHP文件只能包含PHP代码,而不能包含HTML、JavaScript等。
  • 命名空间声明后必须插入一个空行。
  • 方法的左括号必须和方法名所在行的代码同一行,而不是另起一行。
  • 针对代码的不同部分应该空一行进行分组。

下面是一些示例代码:

<?php
namespace MyApp;

class MyClass {
    public function myMethod($arg1, $arg2 = '') {
        if ($arg1 === $arg2) {
            // statements
        } elseif ($arg1 > $arg2) {
            // statements
        } else {
            // statements
        }
    }
}
  1. PSR-4:自动加载规范

PSR-4规范定义了类文件应该放置在文件系统上的位置以及命名空间应该如何映射到这些位置。具体来说,它规定了使用PSR-4标准自动加载的PHP类必须遵循以下格式:

<?php
namespace Namespace\To\Class;

class MyClass {
  // ...
}

下面是一个使用 PSR-4 标准自动加载的示例:

<?php
require 'vendor/autoload.php';

此处假设你使用Composer来加载依赖库,且该库中定义了按照 PSR-4 标准进行自动加载的代码。

  1. PSR-7:HTTP消息接口

PSR-7定义了HTTP请求的接口和HTTP响应的接口。由于HTTP请求和响应是每个按照HTTP协议通信的Web应用程序的核心要素,因此它提供了一个标准的接口,可用于代表它们并处理它们。

以下是一个使用 PSR-7 接口的代码示例:

<?php
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;

class MyController {
    public function myAction(ServerRequestInterface $request, ResponseInterface $response) {
        $response->getBody()->write('Hello, World!');
        return $response;
    }
}

在此示例中,MyController类中的myAction方法接受一个实现了 ServerRequestInterface 接口的请求和一个实现了 ResponseInterface 接口的响应,并在响应中输出了 Hello, World!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章