目錄
創作初衷
你能學到什麼
範例
首頁 後端開發 php教程 手寫PHP API框架(一)之PSR規範

手寫PHP API框架(一)之PSR規範

Feb 10, 2023 am 10:31 AM
php 編碼規範

這篇文章為大家帶來了關於php的相關知識,其中主要跟大家聊一聊編碼規範,也建議大家在開發中盡量遵循規範,有興趣的朋友下面一起來看一下吧,希望對大家有幫助。

創作初衷

  • 有沒有用煩了CURD?
  • 各種框架是不是有點點頭?
  • 有沒有嘗試自己設計一個框架?
  • 學了PHP文法,沒有專案去實戰,夯實基礎

#希望能幫助能讓你快速地搭建一個自己的框架,能給你的工作或學習中帶來一定的幫助與啟發。

你能學到什麼

  • PSR規格

  • #composer的使用

  • 快速建立一個API介面框架

  • Redis各種資料類型的應用程式

  • 快取應用程式分析


#在開發框架之前,我來介紹框架開發所遵循的規格。

大多數程式語言都有自己的一套編碼規範,作為“世界上最好的語言”,PHP當然也有自己的編碼規範。這個規範就是PHP Standard Recommendation(簡稱PSR)。

當然,從我自己的工作中,我發現很多PHP程式設計師尤其是初級程式設計師,是不知道PHP是有這麼一個規範的,我認為這是不科學的。

什麼是PSR?

介紹PSR之前需要先介紹一下制定此規範的組織-----PHP-FIG,全名為PHP Framework Interoperability。

組織成員制定規範,並且落實在自己的專案中,雖然不是官方組織,但也代表了大部分PHP社群項目,如CakePHP,Composer,Drupal,PEAR,Slim,Yii framework,Zend Framework等。並且有越來越多的項目加入並遵循此標準。

PSR專案的目的在於:透過框架作者或框架的代表之間討論,以最低程度的限制,制定一個協作標準,各個框架遵循統一的編碼規範,讓工程師一起更好協同工作。

截止目前,已經官網已有20條列出,除去起草中和捨棄的,有以下13條。

手寫PHP API框架(一)之PSR規範


我們不妨來看看這些規格:

PSR-1 基礎編碼規格

  • PHP 程式碼檔案必須以
  • PHP 程式碼檔案必須以不含BOM的UTF-8編碼
  • PHP 程式碼中應該只定義類別、函數、常數等聲明,或其他會產生副作用的操作(如:產生檔案輸出以及修改.ini 設定檔等),二者只能選其一
  • 命名空間以及類別必須符合PSR的自動載入規範PSR-4
  • 類別的命名必須遵循StudlyCaps 式大寫開頭的駝峰命名規範
  • 類別中的常數所有字母都必須大寫,單字間用底線分隔
  • 方法名稱必須符合camelCase 式的小寫開頭駝峰命名規範

PSR-12 程式碼風格規格

PSR-12的規格很細緻,包含了聲明、命名空間、類別及繼承以及控制結構等說明。

我們先來看一個demo:

<?php

declare(strict_types=1);

namespace Vendor\Package;

use Vendor\Package\{ClassA as A, ClassB, ClassC as C};
use Vendor\Package\SomeNamespace\ClassD as D;

use function Vendor\Package\{functionA, functionB, functionC};

use const Vendor\Package\{ConstantA, ConstantB, ConstantC};

class Foo extends Bar implements FooInterface
{
    public function sampleFunction(int $a, int $b = null): array
    {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        } else {
            BazClass::bar($arg2, $arg3);
        }
    }

    final public static function bar()
    {
        // method body
    }
}
登入後複製
  • 程式碼必須遵循[PSR-1] 中的編碼規範
  • 所有PHP檔案必須使用Unix LF (linefeed )作為行的結束符號;
  • 所有PHP檔案必須以一個空白行作為結束;
  • #純PHP程式碼檔案必須省略最後的?>結束標籤
  • 每行的字元數應該軟性保持在80 個之內,理論上一定不可多於120 個,但一定不可有硬性限制;非空行後一定不能有多餘的空格符;
  • 空行可以使得閱讀程式碼更加方便以及有助於程式碼的分塊。
  • 每行一定不能存在多於一條語句
  • 代碼必須使用4個空格符的縮進,一定不能用tab鍵
  • PHP所有關鍵字必須全部小寫
  • 控制結構的基本規格如下:
控制结构关键词后必须有一个空格。
左括号 ( 后一定不能有空格。
右括号 ) 前也一定不能有空格。
右括号 ) 与开始花括号 { 间一定有一个空格。
结构体主体一定要有一次缩进。
结束花括号 } 一定在结构体主体后单独成行。复制代码
登入後複製

程式碼風格規格內容很多,這裡就不一一說明了,大家可自行閱讀

PSR-4 自動載入

關於由檔案路徑自動載入對應類別的相關規範, 本規範是可互通的,可以作為任一自動載入規範的補充,其中包括PSR- 0,此外, 本PSR 還包括自動載入的類別對應的文件存放路徑規範。

  • 此處的「類別」泛指所有的class類別、介面、traits可重複使用程式碼區塊以及其它類似結構。

  • 一個完整的類別名稱需具有以下結構:

     \<命名空间>(\<子命名空间>)*\<类名>
    登入後複製
    • 完整的類別名稱必須要有一個頂級命名空間,被稱為"vendor namespace";

    • 完整的類別名稱可以有一個或多個子命名空間;

    • 完整的類別名稱必須有一個最終的類別名稱;

    • 完整的類別名稱中任意一部分中的下劃線都是沒有特殊意義的;

    • 完整的類別名稱可以由任意大小寫字母組成;

    • 所有類別名稱都必須是大小寫敏感的。

  • 當根據完整的類別名稱載入對應的檔案…

    • 完整的類別名稱中,去掉最前面的命名空間分隔符,前面連續的一個或多個命名空間和子命名空間,作為“命名空間前綴”,其必須與至少一個“文件基目錄”相對應;

    • 緊接命名空間前綴後的子命名空間必須與對應的」檔案基底目錄「相匹配,其中的命名空間分隔符號將作為目錄分隔符。

    • 結尾的類別名稱必須與對應的以 .php 為後綴的檔案同名。

    • 自動載入器(autoloader)的實作一定不能拋出例外、一定不能觸發任一層級的錯誤訊息以及不應該有回傳值。

  • 範例

    下表展示了符合規範完整類別名稱、命名空間前綴和檔案基底目錄所對應的檔案路徑。

    \Acme\Log\Writer\File_Writer#\Aura\Web\Response\Status\Symfony\Core \Request
    完整類別名稱 #命名空間前綴 #檔案基底目錄 檔案路徑
    #Acme\Log\Writer ./acme-log-writer/lib/ ./acme-log-writer/lib/File_Writer.php
    Aura\Web /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php
    Symfony\Core

    ./vendor/Symfony/Core/

    ./vendor/Symfony/Core/Request.php


    #\Zend\Acl

    Zend/usr/includes/Zend/

    ###/usr/includes/Zend/Acl.php####### #########暫時且只介紹這比較常用的三個規範。 #########更多最新規範建議點擊查看############本節主要介紹了PHP的編碼規範PSR,建議大家在開發中盡量遵循此規範,特別是團隊開發的時候,我們不應該各自有著各自的程式設計風格,應該盡量統一風格。正如PHP-FIG組織的初衷所說,他們建立的規範不是限制大家的編碼自由,只是尋找共通性,為了我們一起更好的協同工作。 ######推薦學習:《###PHP影片教學###》###

    以上是手寫PHP API框架(一)之PSR規範的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles