站長資訊網
最全最豐富的資訊網站

手寫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條。

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


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

PSR-1 基礎編碼規范

  • PHP 代碼文件必須以 <?php 或 <?= 標簽開始
  • PHP 代碼文件必須以不帶BOM的UTF-8編碼
  • PHP 代碼中 應該 只定義類、函數、常量等聲明,或其他會產生 副作用 的操作(如:生成文件輸出以及修改 .ini 配置文件等),二者只能選其一
  • 命名空間以及類必須符合 PSR 的自動加載規范PSR-4
  • 類的命名必須遵循 StudlyCaps 式大寫開頭的駝峰命名規范
  • 類中的常量所有字母都必須 大寫,單詞間用下劃線分隔
  • 方法名稱必須符合 camelCase 式的小寫開頭駝峰命名規范

PSR-12 代碼風格規范

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

我們先來看一個demo:

<?php  declare(strict_types=1);  namespace VendorPackage;  use VendorPackage{ClassA as A, ClassB, ClassC as C}; use VendorPackageSomeNamespaceClassD as D;  use function VendorPackage{functionA, functionB, functionC};  use const VendorPackage{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)的實現一定不能拋出異常、一定不能觸發任一級別的錯誤信息以及不應該有返回值。

例子

下表展示了符合規范完整類名、命名空間前綴和文件基目錄所對應的文件路徑。

完整類名 命名空間前綴 文件基目錄 文件路徑
AcmeLogWriterFile_Writer AcmeLogWriter ./acme-log-writer/lib/ ./acme-log-writer/lib/File_Writer.php
AuraWebResponseStatus AuraWeb /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php
SymfonyCoreRequest SymfonyCore ./vendor/Symfony/Core/ ./vendor/Symfony/Core/Request.php
ZendAcl Zend /usr/includes/Zend/ /usr/includes/Zend/Acl.php

暫且只介紹這比較常用的三個規范。

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
国产精品无码亚洲精品2021| 99久热只有精品视频免费观看17| 日韩十八禁一区二区久久| 99视频精品全部在线观看| 日韩精品一区二区亚洲AV观看| 日韩精品在线观看| 亚洲精品无码专区久久同性男| 亚洲人精品午夜射精日韩| 免费精品一区二区三区在线观看| 国产精品亚洲四区在线观看| 99热精品久久只有精品30| 久久国产精品99久久久久久牛牛| 99热婷婷国产精品综合| 国产伦精品一区二区三区视频金莲| 亚洲精品日韩一区二区小说| 国产suv精品一区二区6| 国产精品久久久久久久网站| 成人H动漫精品一区二区| 亚洲精品乱码久久久久蜜桃| 99久久99久久精品免费看蜜桃| 91久久精品视频| 97精品国产91久久久久久久| 色国产精品一区在线观看| 久久国产精品亚洲综合| 国产精品内射后入合集| 九九99精品久久久久久| 国产精品无码午夜福利| 亚洲精品亚洲人成人网| 亚洲精品狼友在线播放| 国产网红无码精品视频| 国产美女久久精品香蕉69| a级精品九九九大片免费看| 法国性xxxx精品hd| 国产精品无码无在线观看| 青青青青久久精品国产| 国产精品高清一区二区三区| 久久精品国产99精品国产亚洲性色| 久久久久亚洲精品成人网小说| 日韩精品人妻系列无码专区| 久久精品a亚洲国产v高清不卡| 精品少妇人妻av无码久久|