簡介
Composer 包是 PHP 源碼文件的集合,使用 Composer 包可以方便的使用他人已經開發好的實現特定功能的 PHP 源碼,避免重復造輪子。並且,我們也可以創建自己的 Composer 包,給他人或自己在項目中提供便利,在實際的使用過程中,也更加容易持續完善 Composer 包。
注意:根據 Composer 官方文檔的介紹,Composer 不是一個包管理器(not a package manager),而只是用做依賴管理(dependency manager)。
初始化擴展包
先創建一個空目錄,再在空目錄里執行 Composer 自帶的 init 命令,自動生成 Composer 的配置文件(composer.json)。
$ mkdir composer_test
$ cd composer_test
$ composer init

請注意:Minimum Stability(官方說明) 要輸入 dev,表明我們的擴展包最小穩定版的開發版。否則 Composer 的默認 Minimum Stability 是 stable,擴展包需要打上版本號才能被 Composer 認為是穩定版(stable),前期開發調試時簡單點處理,設置為 dev,這樣引入開發中的 Composer 擴展包時不需要去管什么版本號,等開發調試過了再說。
type 字段的官方說明。
version 字段的官方說明。
包的環境要求和自動加載規范
環境要求通過 composer.json 里的 require 字段來限制。
自動加載規范通過 autoload 字段來定義。
現在假定需要 PHP 的版本大於等於 7.0.0,並且當前包的 src 目錄下的文件以 Yxz\ComposerTest 命令空間來加載,在 composer.json 中增加以下代碼:
"require": {
"php": ">=7.0"
},
"autoload": {
"psr-4": {
"Yxz\\ComposerTest\\": "src"
}
}
如果需要引入其他的非 PSR-4 規范的源碼文件,可能會需要用到 autoload 下的 file(官方說明) 字段,每一次請求 PHP 時都是包含這些文件。
例如要包含釘釘 SDK 的代碼,可以在 composer.json 中增加以下代碼:
"autoload": {
"files": [
"lib/taobao-sdk-PHP/TopSdk.php"
]
}
擴展包里創建類文件
src 目錄下新建 Calc.php 文件,內容如下:
<?php
namespace Yxz\ComposerTest;
class Calc
{
// 計算平方值
public function square($val)
{
return $val * $val;
}
}
在項目中引入本地的擴展包
項目要引入本地目錄的擴展包,先要在 composer.json 文件中加入以下內容:
"repositories": [
{
"type": "path",
"url": "/home/yxz/samba_share/project/composer_test"
}
]
然后在項目目錄下執行 Composer 命令:
composer require yxz/composer_test:@dev
或者
composer require yxz/composer_test:dev-master
注意:上面命令中的 yxz/composer_test 就是 Composer 擴展包里 composer.json 的 name 字段值。@dev 或 dev-master 表示引入的擴展包是主分支的最新版,當還未將擴展包提交到 Github 倉庫或者發布到 Packagist 上時,一般這樣引入擴展包。
Composer 會輸出下面內容,表示已與本地的擴展包目錄建立了超鏈接(當直接修改擴展包目錄里的源碼時,項目里可以直接看到效果):

測試項目中引入的本地擴展包
新建測試 PHP 文件:
<?php
$calc = new \Yxz\ComposerTest\Calc();
echo $calc->square('12');
終端或者瀏覽器訪問這個 PHP 文件,會看見輸出 144:

謝謝閱讀。
參考文章:
學習開發自己的 Composer 包,並使用 GitHub 實時更新到 Packagist | Laravel China 社區
Composer 包開發居然這么簡單 - 掘金
PHP回顧之創建自己的Composer包 - 掘金
