編寫你的PHP開發框架:語言基礎-Composer和PSR

2020-3-7 15:28| 發布者: 弄樂詬| 查看: 81| 評論: 0

摘要: 每一種編程語言的流行,都需要構建各自的生態圈子,這其中有兩個比較重要的環節:第一就是就是依賴和包的管理,另外一環,就是編碼規范和約束。這一篇,我們就來聊一下Composer和PSR。php一直被人詬病最多的兩點就是 ...
每一種編程語言的流行,都需要構建各自的生態圈子,這其中有兩個比較重要的環節:第一就是就是依賴和包的管理,另外一環,就是編碼規范和約束。

這一篇,我們就來聊一下Composer和PSR。

編寫你的PHP開發框架:語言基礎-Composer和PSR

php一直被人詬病最多的兩點就是包的管理和代碼的不規范(甚至是PHP源碼中的命名都夾著各種各樣的風格),但php的圈子都在努力的去改善這些情況,所以有了Composer和PSR的出現。

Composer簡介及安裝


現代編程語言,依賴管理工具是必不可少的,nodejs有npm,java有Maven,而php現在有了Composer。

Composer解決了PHP項目的依賴關系,且實現了自動加載。開發人員只需要幾個命令行,就能獲取其他開發者的包。個人認為,composer的出現,php的生態才算真正的形成。

composer是以phar格式的執行文件發布,可以使用以下命令下載安裝:

編寫你的PHP開發框架:語言基礎-Composer和PSR

composer安裝


說明:
  • 第一行為curl下載安裝腳本,然后用php去執行進行安裝
  • 第二行將可執行文件composer.phar移動到環境變量所包含的可全局執行的目錄,以便可以直接使用composer命令。
  • 最后,查看一下composer當前版本。

如果需要更新composer,可使用命令 “composer selfupdate”

另外,由于一些眾所周知的原因,建議將composer切換回國內鏡像,以提高速度和穩定性

編寫你的PHP開發框架:語言基礎-Composer和PSR

創建composer包


想創建一個composer的包很簡單,只需在包的目錄下添加composer.json文件,并在其中指定name字段即可。

下面我們用一個實際例子說明一下。

跟著例子做之前,先確保你有github帳號和packagist帳號。

接下來的例子,myname均指你在packgist中創建的帳號名,請自行替換。

composer的包名稱是由“作者/項目名稱”組成。包名稱一定要加上作者,以避免沖突。

如:myname/helloworld,表示myname創建的helloworld項目。

具體操作步驟:
  • 創建一個用來存放composer項目代碼的的目錄,比如helloworld_src, 該目錄同樣是github倉庫根目錄。
  • 在helloworld_src下創建composer.json文件,編輯內容如下:

編寫你的PHP開發框架:語言基礎-Composer和PSR

composer包配置


autoload中注冊了一個psr-4的loader,設置了從libs目錄加載命名空間為myname\\helloworld\\的類。
  • 開始編寫包的代碼

先在helloworld_src下創建libs目錄,然后在在該目錄下分別創建Man.php和ET.php文件,以myname\\helloworld為命名空間:

編寫你的PHP開發框架:語言基礎-Composer和PSR

編寫你的PHP開發框架:語言基礎-Composer和PSR

  • 提交到github

代碼編寫完成后,我們就可以提交到github了(composer.json在github倉庫的根目錄)。

提交到github后,我們就可以在其它項目中使用我們的包了。

要使用發布在github上的包,需要在項目的composer.json中用“repositories來”指定包所在的位置
  • 發布到packagist

編寫好的composer包,如果只發布到github是不夠的,因為要使用github上的包,需要手工編輯composer.json文件并加上repositories字段,這對開發者是不友好的。

所以,對于測試好的包,最后還是需要發布到packagist,以方便其它開發者搜索和調用。

發布的方法很簡單,登錄packagist,點擊submit,填入你的包所在的源地址,packagist就會去抓取了。

至此,我們的composer包已編寫完成,接下來我們來看看怎么使用。

使用composer包


接下來,我們使用具體的例子,演示一下如何使用我們編寫的composer包。

我們先演示在項目目錄手工創建編寫composer.json的方法來下載使用發布到github上的composer包, 以下是composer.json的內容:

編寫你的PHP開發框架:語言基礎-Composer和PSR

配置依賴composer包


編輯完成后,執行composer install命令,我們依賴的myname/helloworld就會被自動下載安裝vendor/myname/helloworld目錄下 。

如果其間提示需要Token,可以在github上生成,具體是 profile > developer settings > Persional access tokens

接下來編寫自己的代碼,示范怎么使用我們的composer包中的對象和方法。

編寫你的PHP開發框架:語言基礎-Composer和PSR

使用composer包


如果包已同步發布到packagist,可以直接用命令行下載安裝
composer require 'myname/helloworld:dev-master'

其它命令行操作:
- composer update 更新所有依賴
- composer update '包名' 更新指定包,可同時更新多個
- composer search 'keyword' 搜索包,可使用 ```--only-name```讓結果只顯示包名
- composer show 列出所有已安裝的包

Composer就簡單介紹到這里,你可以在packagist(https://packagist.org/)中搜索你需要的合適的composer包來添加到你的項目中來,目前已有大量優秀的composer包可供選擇。

接下來再聊一些PSR。

PSR簡介


每一種語言,都會有一些約定俗成的編碼規范或者說最佳實踐,PHP圈子目前較多使用PSR作為規范的標準。

PSR是PHP Standard Recommendations 的簡寫,由PHP FIG組織制定的PHP規范,是PHP開發的實踐標準。

PHP FIG 是由幾位開源框架的開發者成立的非官方組織,代表了大部分的PHP社區。

PSR目前已通過了6套規范,下面一一簡單介紹一下。
  • PSR-1(基本代碼規范)和PSR-2 (代碼風格規范)

這兩套規范制定了編寫基本代碼的相關標準,跟一般公司自己制定的“xx語言編碼規范”類似,用于確保PHP代碼風格有較高程度的一致性。

比如:
  1. 源文件必須以
  2. 文件用途單一性
  3. 類、命名空間、方法、常量等的命名規則
  4. 空格、空行、花括號的使用約定
  5. 類的屬性、方法的修飾符約定
  • PSR-3(日志接口規范)

PSR-3規定了一套通用的日志記錄器接口(Psr\\Log\\LoggerInterface),為了符合PSR-3規范,使用者必須自己實現該規范中的接口,以便形成統一一致的日志操作風格。

現在網絡上有很多優秀的實現了Psr\\Log\\LoggerInterface的日志操作庫,如果不想浪費更多的時間來自己實現,也可以直接拿來用,比如monolog。
  • PSR-4(自動加載新規)

PSR-4(Improved Autoloading)是關于自動載入對應類文件的相關規范,是 PSR-0 自動加載規范的補充(PSR-0已被廢棄)。

PSR-4主要約定了命名空間與文件系統的映射關系, 即規定了類(也包括接口、Traits等)的全限定類名規則和自動加載過程處理等。
  • PSR-6(緩存接口規范)

緩存是提升應用性能的常用手段,本規范的目標是:創建一套通用的緩存接口規范,能夠讓開發人員整合到現有框架和系統,而不需要去開發框架專屬的適配器類。

與日志接口規范類似,本規范只約定了緩存操作的相關接口以及緩存的相關內容規范,具體實現需要開發者自己完成。
  • PSR-7(HTTP消息接口規范)

HTTP消息,即我們之前WEB開發基礎中提到的HTTP協議中的請求格式和響應格式。作為WEB開發者經常需要構建、讀取這些消息。

本規范約定了一套操作HTTP消息的相關接口定義,包括:
  1. Psr\\Http\\Message\\MessageInterface http消息的通用方法
  2. Psr\\Http\\Message\\RequestInterface http請求消息對象
  3. Psr\\Http\\Message\\ServerRequestInterface 服務端收到的消息對象
  4. Psr\\Http\\Message\\ResponseInterface 服務端響應的消息對象
  5. Psr\\Http\\Message\\UriInterface Uri數據對象
  6. Psr\\Http\\Message\\UploadedFileInterface 上傳的文件對象

除了以上這些已獲得通過的規范,PSR還有一些正在起草的內容,比如PHPDoc標準、服務容器接口等。想更詳細了解更多規范的朋友,可自行前往查看PSR的官方文檔。

最后想說一下的是:

規范不是死的,只是一個合理建議,并不是說必須要嚴格遵守,但是,當大家都這么做并形成約定俗成的習慣的時候,好處自然就會體現出來,畢竟這是一些該領域的資深人士討論總結出來的寶貴經驗。

路過

雷人

握手

鮮花

雞蛋

相關分類

返回頂部
gta5ceo干什么赚钱快