背景說明
進入我的部落格
隨著專案程式碼量的不斷增加,以及一些庫的依賴,我們不得不引入包的管理,來解決不易管理、閱讀、模組化等問題。
三方庫優秀,而且很多人在維護,功能對接也方便,我們沒有必要在這個一個常用的功能上花費時間來封裝或者造輪子,
很多人在自己的專案中都實踐過,出現了問題,反應的issue也很快會被解決掉,功能也不斷在完善。
一直強調,站在巨人的肩膀上,我們會走的更遠,也許我們自己擼出來的程式碼難等大雅之堂,無法比擬,
把重心放在自己的核心產品和功能時間上,學會借鑑學習和使用,降低自己的開發成本。
也許有人會覺得我使用三方庫可能會造成效能上的影響,有些功能我根本用不到。專案中程式碼有很多無用的程式碼,導致檔案載入過慢,
其實不用擔心, opcache
可以將php指令碼預編譯到共享記憶體中來提升php的效能。
php Composer psr-4 autoload
Composer 是php用來管理依賴關係的工具,可以在專案中宣告外部依賴的工具庫,Composer會幫你安裝這些依賴的庫檔案 psr-4 是一種程式碼規範,能夠實現package的自動載入,規範瞭如何從檔案路徑自動載入類,同時也規範了自動載入檔案的位置
自動載入
我們在支援Composer的專案中,只需引入這個檔案,加上下面這段php的程式碼,就可以得到自動載入的支援了
<?php
require_once __DIR __ . '/vendor/autoload.php';
複製程式碼
composer.json
{
"autoload": {
"psr-4": {
"Work\\": "src/"
},
"psr-0": {
"Vendor_Namespace_": "src/"
}
}
}
複製程式碼
Composer 將註冊一個 PSR-4 autoloader 到 Work 名稱空間, PSR-0 則支援_
,自動轉化為目錄結構
classmap
不遵循PSR-0/4規範的類庫,
files
明確的指定檔案載入
額外的
repositories 自定義資源包庫
type
- composer Composer 型別的資源庫,是一個簡單的網路伺服器上的
- vcs git、svn、hg等
- pear 從pear上獲取資源
- package 內聯一個
composer.json
物件
scripts
Composer 允許你在安裝過程中的各個階段掛接指令碼。
詳細流程
典型的命令,composer安裝時
- post-install-cmd
composer install
執行之後觸發 - post-update-cmd
composer update
執行之後觸發
自定義指令碼demo
{
"scripts": {
"post-update-cmd": "MyVendor\\MyClass::postUpdate",
"post-package-install": [
"MyVendor\\MyClass::postPackageInstall"
],
"post-install-cmd": [
"MyVendor\\MyClass::warmCache",
"phpunit -c app/",
"find vendor -type d -name .git -exec rm -rf '{}' \\;"
]
}
}
複製程式碼
<?php
namespace MyVendor;
use Composer\Script\Event;
class MyClass
{
public static function postUpdate(Event $event)
{
$composer = $event->getComposer();
// do stuff
}
public static function postPackageInstall(Event $event)
{
$installedPackage = $event->getOperation()->getPackage();
// do stuff
}
public static function warmCache(Event $event)
{
// make cache toasty
}
}
複製程式碼
不然看出執行的指令碼可以是一個類中的靜態方法,當然也可以是一個函式,還可以是一條shell
命令
我們也可以手動執行一些命令
composer run-script [--dev] [--no-dev] script
複製程式碼
擴充套件
順便了解一下其他的幾個程式碼規範
PSR
psr-0 自動載入
psr-1 基本程式碼規範
- 檔案內只出現
<?php
和<?=
標籤 (必須) - 只是用
utf-8
沒有BOM頭的php程式碼 (必須) - 宣告新的型別符,不產生副作用
- 名稱空間遵循
autoload
自動載入psr-0/4
規範(必須) - 類名駝峰(必須)
- 類中的常量下劃線
_
分隔(必須) - 方法駝峰(必須)
psr-2 程式碼樣式
- 必須遵循psr-1
- 四個空格,而非tab
- 限制每行長度 80或者更少
- namespace 和 use 必須空格
- 類的括號必須獨立一行
- 類的方法也一樣
- 所有的屬性和方法必須在修飾符之前,static在之後
- 關鍵詞之後必須有空格
- 程式碼流程控制,
{
在一行,}
獨立一行 {
之後沒有空格,}
之前沒有空格
psr-3 日誌介面
- 錯誤級別
RFC 5424
(debug, info, notice, warning, error, critical, alert, emergency)
psr-4 自動載入
相比於 psr-0 規範比較乾淨 PSR-0規範中下劃線_
會被轉化成為目錄分割線
上面有詳細的介紹,這裡就不再重複