1. 程式人生 > 實用技巧 >建立 PHP Composer 包並使用的操作指南

建立 PHP Composer 包並使用的操作指南

目錄

簡介

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 Stabilitystable,擴充套件包需要打上版本號才能被 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 欄位值。@devdev-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包 - 掘金