欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長(zhǎng)資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

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

          本篇文章給大家?guī)?lái)了關(guān)于php的相關(guān)知識(shí),其中主要跟大家聊一聊編碼規(guī)范,也建議大家在開(kāi)發(fā)中盡量遵循規(guī)范,感興趣的朋友下面一起來(lái)看一下吧,希望對(duì)大家有幫助。

          創(chuàng)作初衷

          • 有沒(méi)有用煩了CURD?
          • 各種框架是不是有點(diǎn)頭大?
          • 有沒(méi)有嘗試自己設(shè)計(jì)一個(gè)框架?
          • 學(xué)了PHP語(yǔ)法,沒(méi)有項(xiàng)目去實(shí)戰(zhàn),夯實(shí)基礎(chǔ)

          希望能幫助能讓你快速地搭建一個(gè)自己的框架,能給你的工作或者學(xué)習(xí)中帶來(lái)一定的幫助與啟發(fā)。

          你能學(xué)到什么

          • PSR規(guī)范

          • composer的使用

          • 快速搭建一個(gè)API接口框架

          • Redis各種數(shù)據(jù)類型的應(yīng)用

          • 緩存應(yīng)用分析


          在開(kāi)發(fā)框架之前,我來(lái)介紹框架開(kāi)發(fā)遵循的規(guī)范。

          大多數(shù)編程語(yǔ)言都有自己的一套編碼規(guī)范,作為“世界上最好的語(yǔ)言”,PHP當(dāng)然也有自己的編碼規(guī)范。這個(gè)規(guī)范就是PHP Standard Recommendation(簡(jiǎn)稱PSR)。

          當(dāng)然,從我自己的工作中,我發(fā)現(xiàn)很多PHP程序員尤其是初級(jí)程序員,是不知道PHP是有這么一個(gè)規(guī)范的,我認(rèn)為這是不科學(xué)的。

          什么是PSR?

          介紹PSR之前需要介紹一下制定此規(guī)范的組織—–PHP-FIG,全稱是PHP Framework Interoperability。

          組織成員制定規(guī)范,并且落實(shí)在自己的項(xiàng)目中,雖然不是官方組織,但也代表了大部分PHP社區(qū)項(xiàng)目,如CakePHP,Composer,Drupal,PEAR,Slim,Yii framework,Zend Framework等。并且有越來(lái)越多的項(xiàng)目加入并遵循此標(biāo)準(zhǔn)。

          PSR項(xiàng)目的目的在于:通過(guò)框架作者或者框架的代表之間討論,以最低程度的限制,制定一個(gè)協(xié)作標(biāo)準(zhǔn),各個(gè)框架遵循統(tǒng)一的編碼規(guī)范,讓工程師一起更好協(xié)同工作。

          截止目前,已經(jīng)官網(wǎng)已有20條列出,除去起草中和舍棄的,有以下13條。

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


          我們不妨來(lái)看看這些規(guī)范:

          PSR-1 基礎(chǔ)編碼規(guī)范

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

          PSR-12 代碼風(fēng)格規(guī)范

          PSR-12的規(guī)范很細(xì)致,包含了聲明、命名空間、類及繼承以及控制結(jié)構(gòu)等說(shuō)明。

          我們先來(lái)看一個(gè)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     } }
          登錄后復(fù)制

          • 代碼 必須 遵循 [PSR-1] 中的編碼規(guī)范
          • 所有PHP文件必須使用Unix LF (linefeed)作為行的結(jié)束符;
          • 所有PHP文件必須以一個(gè)空白行作為結(jié)束;
          • 純PHP代碼文件必須省略最后的 ?> 結(jié)束標(biāo)簽
          • 每行的字符數(shù) 應(yīng)該軟性保持在 80 個(gè)之內(nèi),理論上 一定不可 多于 120 個(gè),但一定不可有硬性限制;非空行后一定不能有多余的空格符;
          • 空行可以使得閱讀代碼更加方便以及有助于代碼的分塊。
          • 每行一定不能存在多于一條語(yǔ)句
          • 代碼必須使用4個(gè)空格符的縮進(jìn),一定不能用 tab鍵
          • PHP所有關(guān)鍵字必須全部小寫
          • 控制結(jié)構(gòu)的基本規(guī)范如下:

          控制結(jié)構(gòu)關(guān)鍵詞后必須有一個(gè)空格。 左括號(hào) ( 后一定不能有空格。 右括號(hào) ) 前也一定不能有空格。 右括號(hào) ) 與開(kāi)始花括號(hào) { 間一定有一個(gè)空格。 結(jié)構(gòu)體主體一定要有一次縮進(jìn)。 結(jié)束花括號(hào) } 一定在結(jié)構(gòu)體主體后單獨(dú)成行。復(fù)制代碼
          登錄后復(fù)制

          代碼風(fēng)格規(guī)范內(nèi)容很多,這里就不一一說(shuō)明了,大家可自行閱讀

          PSR-4 自動(dòng)加載

          關(guān)于由文件路徑 自動(dòng)載入 對(duì)應(yīng)類的相關(guān)規(guī)范, 本規(guī)范是可互操作的,可以作為任一自動(dòng)載入規(guī)范的補(bǔ)充,其中包括 PSR-0,此外, 本 PSR 還包括自動(dòng)載入的類對(duì)應(yīng)的文件存放路徑規(guī)范。

          • 此處的“類”泛指所有的class類、接口、traits可復(fù)用代碼塊以及其它類似結(jié)構(gòu)。

          • 一個(gè)完整的類名需具有以下結(jié)構(gòu):

             <命名空間>(<子命名空間>)*<類名>
            登錄后復(fù)制

            • 完整的類名必須要有一個(gè)頂級(jí)命名空間,被稱為 "vendor namespace";

            • 完整的類名可以有一個(gè)或多個(gè)子命名空間;

            • 完整的類名必須有一個(gè)最終的類名;

            • 完整的類名中任意一部分中的下劃線都是沒(méi)有特殊含義的;

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

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

          • 當(dāng)根據(jù)完整的類名載入相應(yīng)的文件……

            • 完整的類名中,去掉最前面的命名空間分隔符,前面連續(xù)的一個(gè)或多個(gè)命名空間和子命名空間,作為“命名空間前綴”,其必須與至少一個(gè)“文件基目錄”相對(duì)應(yīng);

            • 緊接命名空間前綴后的子命名空間必須與相應(yīng)的”文件基目錄“相匹配,其中的命名空間分隔符將作為目錄分隔符。

            • 末尾的類名必須與對(duì)應(yīng)的以 .php 為后綴的文件同名。

            • 自動(dòng)加載器(autoloader)的實(shí)現(xiàn)一定不能拋出異常、一定不能觸發(fā)任一級(jí)別的錯(cuò)誤信息以及不應(yīng)該有返回值。

          例子

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

          完整類名 命名空間前綴 文件基目錄 文件路徑
          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

          暫且只介紹這比較常用的三個(gè)規(guī)范。

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)