目前流行的 PHP 先進框架開發者們皆有共識地採用 PSR (PHP Standards Recommendations) 建議規範,以避免重覆造輪子的情況,增加社群活力。例如寫給 Slim 框架用的 PSR-15 中介層 (middleware) 類別,也能套用在 Zend 框架,大大增加物件導向程式設計的優點 - 可複用性 (reuseability)。

是建議規範,不是規定

先前介紹了 PHP 常見的設計模式,可以運用在我們的作品中提高程式碼的品質,但為了讓作品更貼近目前流行的 PHP 框架,筆者建議 PSR 是必須深入認識的。

由於 PSR 是 PHP 社群討論出來的建議規範,要不要採用端看個人。按照 PSR 走的作品在社群接受度會比較高唷。

目錄

目前使用中的規範為:

編號 名稱 名稱 (中) 簡介
1 Basic Coding Standard 基本程式設計規範 程式風格的建議,如:排版、命名原則等等。
3 Logger Interface 日誌記錄程式介面 針對日誌記錄程式給出了記錄的訊息級別、方法命名等規範。
4 Autoloading Standard 自動載入規範 針對自動載入程式的設計規範。
6 Caching Interface 快取介面 快取的實作建議。
7 HTTP message interfaces HTTP 通訊介面 HTTP 訊息規範於 RFC 7230 及RFC 7231,URL 規範於RFC 3986 的實作建議。
11 Container interface 容器介面 依賴注入容器的規範。
12 Extended Coding Style Guide 延伸程式設計風格指南 對於 PSR-1 的規範不足之處,再補充說明。
13 Hypermedia Links 超媒體連結 連結定義介面。對 PSR-7 中對於超連結的處理做補充。
14 Event Dispatcher 事件調度程式 針對事件調度程式的實作,提供名詞解釋、介面、類別及方法命名等規範。
15 HTTP Handlers HTTP 處理程式 HTTP 伺服器端請求處理程式,為 PSR-7 提供了中介層 (middleware) 的實作規範
16 Simple Cache 簡易快取 使用在最簡單的情境,PSR-6 的簡易版封裝。
17 HTTP Factories HTTP 工廠 為 PSR-7 的工廠模式。
18 HTTP Client HTTP 客戶端 客戶端界面的實作規範。

在此系列文章中,會介紹的是和「開放源碼的淬練」主題直接相關的。

PSR-1, 12: 程式碼風格

如果程式編寫風格很糟糕,例如這種毛毛蟲寫法:

foreach($news as $k=>$v){
    $v["Datum"]=strftime("%d.%m.%Y", strtotime($v["Datum"]));
}

對於排版一點也不講究,唯一的好處是:

「當專案出現 Bug 時,不用 git blame 一眼就可以知道這底誰寫的 @@ 」

這是很不好的好處吧?

一致的程式碼編寫風格,會讓人看了舒服。因此 PRS-1、PSR-12 詳細描述了程式的寫作風格。

PSR-4: 自動載入

我們發佈到 Composer 的套件需要依照 PSR-4 的規範去安排套件的檔案命名、命名空間及類別的命名,以利於 Composer 的自動載入程式在使用 new 關鍵字實例化物件時,自動載入類別所在的檔案 。

PSR-7, 15, 17: HTTP 通訊

如果作品中含有 HTTP 的處理。不採用 PHP 原生的全域變數,例如 $_GET, $_SERVER, $_POST, $_COOKIE, $_SESSION。而改採用 PSR-7 ,設計成 PSR-15 的中介層程式,是最佳實踐。如此一來可以讓作品順利在各種不同的 PHP 框架中運作,也才不會發生意外的 bug。

結論

在接下來的三天,筆者會分別介紹:

  • 程式碼風格 (PSR-1, 12)
  • 自動載入 (PSR-4)
  • HTTP 通訊 (PSR-7, 15, 17)

我們明天見囉!

最後修改日期: 2022-02-01

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。