什么是 Composer
Composer 是 用 PHP 开发的用来管理项目依赖的工具,当你在项目中声明了依赖关系后,composer 可以自动帮你下载和安装这些依赖库,并实现自动加载代码。
Composer 工作原理
主要由三个部分组成:命令行工具、包仓库、代码库:

1. 命令行
命令行指的就是 composer 的各种命令。如:创建项目(create-project)、引入扩展包(require)、移除扩展包(remove)、清空缓存(clear-cache)等
2. 仓库
Packagist:官方仓库,也就是我们平常说的 Composer 源,它的作用是存储这些包的信息,版本,代码来源,依赖,作者,主页等信息。官网是 packagist.org, 你也可以将自己的包发布在上面,这样 Composer 工具就能搜索与安装你的包了 公有仓库:https://packagist.org私有仓库:https://packagist.comRepository:代码存储库仓库,Packagist 支持公开与私有仓库,通常是 GitHub 作为代码仓库,当然也可以是 Gitee
3. 自动加载
只需要执行 composer 命令拉取扩展包,即可实现自动加载代码,包依赖管理和使用自动加载,PSR-0 和 PSR-4 自动加载规范。
composer 制作步骤
1. 创建代码仓库
在自己的 github 创建一个公共仓库,这里仓库名为 hello,创建好后克隆代码到自己本机电脑
git clone git@github.com:cbw7172002/Composer_hello.git

2.初始化 composer.json

项目目录结构

src/ 存放源代码文件
vendor/ 存放第三方依赖
composer.json 定义项目的元数据和依赖信息
README.md 项目的说明文档
其他必要的文件和目录
3.实现包功能
这里实现一个简单的加密工具类 Encryption
<?php
declare(strict_types=1);
namespace Xifan\ComposerHello;
class Encryption {
public const AES_128_ECB = 'AES-128-ECB';
/**
* @desc 加密
* @param string $data 加密的数据
* @param string $key 密钥,必须是16、24或32个字符长度
* @param string $algo 加密方式
* @param string $iv 初始向量(IV)
* @return string
* @author cbw7172002
*/
public static function encrypt(string $data, string $key, string $algo = self::AES_128_ECB, string $iv = ''): string {
$encryptedBytes = openssl_encrypt($data, $algo, $key, OPENSSL_RAW_DATA);
return base64_encode($encryptedBytes);
}
/**
* @desc 解密
* @param string $data
* @param string $key 密钥,必须是16、24或32个字符长度
* @param string $algo 加密方式
* @param string $iv 初始向量(IV)
* @return false|string
* @author cbw7172002
*/
public static function decrypt(string $data, string $key, string $algo = self::AES_128_ECB, string $iv = '') {
return openssl_decrypt(base64_decode($data), $algo, $key, OPENSSL_RAW_DATA);
}
}4.编写单元测试用例
PHPUnit 是一个轻量级的 PHP 测试框架,单元测试是几个现代敏捷开发方法的基础,使得 PHPUnit 成为许多大型 PHP 项目的关键工具。
全局安装 PHP 测试框架包 phpunit/phpunit
composer global require--dev phpunit/phpunit

EncryptionTest.php 用例
<?php
/**
* @desc EncryptionTest
* @author cbw7172002
* @date 2024/8/12 14:27
*/
declare(strict_types=1);
class EncryptionTest extends \PHPUnit\Framework\TestCase
{
public function test()
{
$data = '开源技术小栈';
$key = '53vYPpTJIR1aYFiFh0PppZzF';
/**
* 加密
*/
$encrypt = \Xifan\ComposerHello\Encryption::encrypt($data, $key);
self::assertIsString($encrypt);
/**
* 解密
*/
$decrypt = \Xifan\ComposerHello\Encryption::decrypt($encrypt, $key);
// 判断解密明文是否和预期的相等
self::assertEquals($decrypt, $data);
}
}运行这个单元测试,在命令行下输入代码
phpunit --bootstrap vendor/autoload.php tests/EncryptionTest.php

结果中点号.代表一个用例通过(即 assert 系列函数都通过)
5.提交代码到 GitHub
git commit -m "Your commit message"
git push --all

6.提交至 Packagist
Packagist 为 composer 默认获取包元数据信息的地址,从 Packagist 获取到元数据信息后,再从 GitHub 上拉取代码。因此,当把你开发的包上传至 GitHub 后还需要将其在 Packagist 注册。
一旦你的包发布到 Packagist 上,其他人就可以通过 Composer 安装你的包,并在他们的项目中使用你的代码。
提交至 Packagist 三个步骤
注册帐号(有的话直接进行下一步)
在https://packagist.org/packages/submit 提交开发包

image 提交成功

image
使用自己的 composer 包
一旦提交的包在 Packagist 发布了,则可以通过 composer 直接安装使用
composer require xifan/composer_hello dev-main #由于没有发布正式包,这里拉取包先要指定 dev-main 分支
如果要发布一个正式版本,需要在自己 github 上的依赖包打标签 tag
// 打标签$ git tag v0.1// 标签推送远程仓库$ git push origin v0.1
这时候再去拉取默认版本,就是刚才打标签的 v0.1 版本了
小结
以上是一个简单的构建自己的 Composer 依赖包的步骤,通过 composer 来管理 PHP 的依赖,通过编写 composer package 去扩展自己的类库,通过引入其他的类库来填充自己的功能,就不用重复造轮子了。当然还有更多的细节和高级用法可以根据具体情况进行调整。希望对你有所帮助!
版权声明:本文为原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
关注微信公众号:"cq_xifan";