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!

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