简介
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 目录下的文件以 YxzComposerTest 命令空间来加载,在 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 YxzComposerTest;
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 YxzComposerTestCalc();
echo $calc->square('12');
终端或者浏览器访问这个 PHP 文件,会看见输出 144:

谢谢阅读。
参考文章:
学习开发自己的 Composer 包,并使用 GitHub 实时更新到 Packagist | Laravel China 社区
Composer 包开发居然这么简单 - 掘金
PHP回顾之创建自己的Composer包 - 掘金