什么是 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";