手寫PHP API框架(一)之PSR規範
這篇文章為大家帶來了關於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條。
我們不妨來看看這些規格:
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 | ./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 |
./vendor/Symfony/Core/Request.php
#\Zend\Acl
###/usr/includes/Zend/Acl.php####### #########暫時且只介紹這比較常用的三個規範。 #########更多最新規範建議點擊查看############本節主要介紹了PHP的編碼規範PSR,建議大家在開發中盡量遵循此規範,特別是團隊開發的時候,我們不應該各自有著各自的程式設計風格,應該盡量統一風格。正如PHP-FIG組織的初衷所說,他們建立的規範不是限制大家的編碼自由,只是尋找共通性,為了我們一起更好的協同工作。 ######推薦學習:《###PHP影片教學###》###以上是手寫PHP API框架(一)之PSR規範的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

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

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

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

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

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

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

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