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

藏色散人
發布: 2023-04-11 10:28:02
轉載
3413 人瀏覽過

這篇文章為大家帶來了關於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中文網其他相關文章!

相關標籤:
來源:juejin.im
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!