一个基于 PHP8.3+ 特性开发的模块化通用工具包

这是一个基于 PHP8.3+ 特性开发的模块化通用工具包,提供了数组处理、字符串处理、时间处理、加解密、消息体、IP地址处理、地理计算、全局辅助方法等功能。支持对象和静态两种调用方式,兼容进程和协程环境。

核心特性

模块化架构

工具包采用清晰的模块化架构,每个模块专注于特定领域的功能:

复制代码
├── src/
│   ├── Message/          // 消息体核心
│   │   ├── Message.php   // 消息体主类(链式调用)
│   │   ├── CodeMap.php   // 状态码映射配置类
│   ├── Crypto/           // 加解密核心
│   │   ├── Crypto.php    // 加解密主类(命名简洁)
│   │   ├── Contracts/    // 接口定义
│   │   │   ├── EncryptInterface.php
│   │   │   ├── DecryptInterface.php
│   ├── Array/            // 数组处理核心
│   │   ├── Arr.php       // 数组处理主类
│   ├── String/           // 字符串处理核心
│   │   ├── Str.php       // 字符串处理主类
│   ├── Time/             // 时间处理核心
│   │   ├── Time.php      // 时间处理主类
│   ├── Math/             // 数学计算核心
│   │   ├── Math.php      // 数学计算主类
│   ├── Geo/              // 地理位置核心
│   │   ├── Geo.php       // 地理位置主类
│   ├── Ip/               // IP地址处理核心
│   │   ├── Ip.php        // IP地址处理主类
│   ├── Curl/             // HTTP请求核心
│   │   ├── Curl.php      // HTTP请求主类
│   │   ├── Response.php  // 响应处理类
│   │   ├── Exception/    // 异常类
│   │   │   ├── CurlException.php
│   │   │   ├── ClientException.php
│   │   │   └── ServerException.php
│   ├── Qrcode/           // 二维码生成核心
│   │   ├── Qrcode.php    // 二维码主类
│   │   ├── Color.php     // 颜色类
│   │   ├── LogoPosition.php   // Logo位置枚举
│   │   ├── RoundBlockSizeMode.php // 圆角模式枚举
│   │   └── EncodingMode.php     // 编码模式枚举
│   ├── Helper/           // 全局辅助函数
│   │   ├── helper.php    // 全局辅助函数文件
├── composer.json         // Composer配置
├── README.md             // 使用文档

数组处理模块

核心方法
方法名 功能描述 调用示例
first() 获取第一个元素 Arr::first([1, 2, 3])
last() 获取最后一个元素 Arr::last([1, 2, 3])
find() 查找满足条件的元素 Arr::find([1, 2, 3], fn($n) => $n > 1)
tree() 数组转树形结构 Arr::tree($list, 'id', 'pid')
list() 树形结构转数组 Arr::list($tree)
deepMerge() 深度合并数组 Arr::deepMerge($arr1, $arr2)
特性
  • ✅ 树形结构转换(数组转树、树转数组)

  • ✅ 层级结构转换

  • ✅ 路径结构转换

  • ✅ 常用数组操作(get/set/has/only/except)

  • ✅ 数组深度合并

  • ✅ 多维数组分组

  • ✅ 多维数组统计(count/sum/avg/max/min)

  • ✅ 多维数组转JSON/JSON转数组

  • ✅ 非递归算法,支持大数据量

  • ✅ 支持点语法和数组嵌套键访问

字符串处理模块

核心方法
方法名 功能描述 调用示例
maskPhone() 手机号脱敏 Str::maskPhone('13800138000')
maskEmail() 邮箱脱敏 Str::maskEmail('user@example.com')
camel() 转驼峰命名 Str::camel('hello_world')
snake() 转蛇形命名 Str::snake('helloWorld')
toBase64() 转Base64编码 Str::toBase64('hello')
fromBase64() Base64解码 Str::fromBase64('aGVsbG8=')
特性
  • ✅ 随机字符串生成

  • ✅ UUID生成

  • ✅ 命名转换(驼峰、蛇形、大驼峰)

  • ✅ 字符串转义和反转义

  • ✅ 字符串修剪

  • ✅ 字符串脱敏(手机号、身份证号、邮箱、银行卡号、车牌号、姓名)

  • ✅ 字符串验证(手机号、身份证号、邮箱、车牌号、银行卡号)

  • ✅ 收货地址解析

  • ✅ 字符串格式化和转换

  • ✅ 字符串相似度比较

  • ✅ 多分隔符字符串分割

时间处理模块

核心方法
方法名 功能描述 调用示例
format() 格式化时间 Time::format(time(), 'Y-m-d')
now() 获取当前时间 Time::now()
today() 获取今天日期 Time::today()
yesterday() 获取昨天日期 Time::yesterday()
tomorrow() 获取明天日期 Time::tomorrow()
add() 时间加法 Time::add(time(), 3600)
sub() 时间减法 Time::sub(time(), 3600)
diff() 时间差 Time::diff(time(), time() - 3600)
diffForHumans() 人性化时间差 Time::diffForHumans(time() - 3600)
weekStart() 本周开始时间 Time::weekStart()
weekEnd() 本周结束时间 Time::weekEnd()
monthStart() 本月开始时间 Time::monthStart()
monthEnd() 本月结束时间 Time::monthEnd()
特性
  • ✅ 时间格式化

  • ✅ 时间计算(加法、减法、差值)

  • ✅ 常用时间获取(当前时间、今天、昨天、明天)

  • ✅ 时区支持

  • ✅ 人性化时间显示、日期范围计算

加解密模块

核心方法
方法名 功能描述 调用示例
cryptoMd5() MD5加密(支持加盐) Crypto::cryptoMd5('123456', 'salt')
cryptoPasswordHash() 密码哈希 Crypto::cryptoPasswordHash('123456')
cryptoPasswordVerify() 密码验证 Crypto::cryptoPasswordVerify('123456', $hash)
cryptoSslEncrypt() SSL对称加密 Crypto::cryptoSslEncrypt('data', $key)
cryptoSslDecrypt() SSL对称解密 Crypto::cryptoSslDecrypt($encrypted, $key)
特性
  • ✅ MD5加密(支持加盐)

  • ✅ 密码哈希(基于PHP原生password_hash)

  • ✅ SSL对称加密(AES-256-GCM)

  • ✅ HMAC签名(支持多种算法)

  • ✅ 双模式调用:实例调用 + 静态调用

  • ✅ 符合安全最佳实践

  • ✅ PHP8.3+只读属性确保配置安全

代码生成模块

  • ✅ 订单号生成(时间戳+随机数)

  • ✅ 邀请码生成(自定义长度和字符集)

  • ✅ URL安全码生成(Base64URL编码)

  • ✅ 注册码生成(支持分段显示)

  • ✅ 线程安全的随机数生成(random_int)

数学计算模块

核心方法
方法名 功能描述 调用示例
add() 高精度加法 Math::add('1.1', '2.2')
sub() 高精度减法 Math::sub('3.3', '1.1')
mul() 高精度乘法 Math::mul('2.5', '4')
div() 高精度除法 Math::div('10', '3')
avg() 平均数 Math::avg([1, 2, 3, 4, 5])
median() 中位数 Math::median([1, 2, 3, 4, 5])
discount() 计算折扣价 Math::discount('100', '0.2')
tax() 计算税额 Math::tax('100', '0.13')
特性
  • ✅ 高精度计算(使用bcmath扩展)

  • ✅ 支持金融计算(折扣、税费、利息)

  • ✅ 支持统计分析(平均数、中位数、标准差)

  • ✅ 支持幂运算、平方根等数学操作

  • ✅ 结果保留任意小数位数

  • ✅ 兼容PHP8.3+特性

地理位置模块

核心方法
方法名 功能描述 调用示例
distance() 计算两点距离 Geo::distance(39.9042, 116.4074, 31.2304, 121.4737)
isValidCoordinate() 验证坐标 Geo::isValidCoordinate(39.9042, 116.4074)
wgs84ToGcj02() WGS84转GCJ02 Geo::wgs84ToGcj02(39.9042, 116.4074)
gcj02ToBd09() GCJ02转BD09 Geo::gcj02ToBd09(39.9042, 116.4074)
getBearing() 计算方位角 Geo::getBearing(39.9042, 116.4074, 31.2304, 121.4737)
getMidpoint() 计算中点坐标 Geo::getMidpoint(39.9042, 116.4074, 31.2304, 121.4737)
特性
  • ✅ 使用Haversine公式计算距离

  • ✅ 支持多种距离单位(公里、英里、米)

  • ✅ 支持坐标转换(WGS84/GCJ02/BD09)

  • ✅ 支持方位角和中点计算

  • ✅ 高精度计算(保留6位小数)

  • ✅ 兼容PHP8.3+特性

  • ✅ 高精度数学计算(加减乘除、取模、幂运算、平方根)

  • ✅ 四舍五入、向上取整、向下取整

  • ✅ 数值比较和格式化

  • ✅ 解决浮点数精度丢失问题

  • ✅ 支持PHP8.3+类型声明

  • ✅ 线程安全的初始化模式

  • ✅ 高精度计算、金融计算、统计分析

消息体模块

核心方法
方法名 功能描述 调用示例
success() 成功响应 Message::success($data)
error() 错误响应 Message::error('错误信息')
warning() 警告响应 Message::warning('警告信息')
info() 信息响应 Message::info('提示信息')
setCode() 设置状态码 Message::success()->setCode(20001)
setMsg() 设置消息 Message::success()->setMsg('操作成功')
setData() 设置数据 Message::success()->setData($data)
setPage() 设置分页 Message::success()->setPage($page)
toJson() 输出JSON Message::success()->toJson()

方法详情

Message::success() - 成功响应

快速构建成功响应,默认状态码200。

复制代码
// 基础用法
$res = Message::success()->result();
// ['code' => 200, 'msg' => '操作成功']

// 带数据的成功响应
$res = Message::success(['id' => 123, 'name' => '测试'])->result();
// ['code' => 200, 'msg' => '操作成功', 'data' => ['id' => 123, 'name' => '测试']]

// 自定义消息
$res = Message::success()->msg('创建成功')->result();
// ['code' => 200, 'msg' => '创建成功']
Message::error() - 错误响应

快速构建错误响应,默认状态码400。

复制代码
// 基础用法
$res = Message::error()->result();
// ['code' => 400, 'msg' => '操作失败']

// 自定义错误信息
$res = Message::error('参数验证失败')->result();
// ['code' => 400, 'msg' => '参数验证失败']

// 自定义错误码和信息
$res = Message::error('Token失效')->setCode(300000)->result();
// ['code' => 300000, 'msg' => 'Token失效']
Message::warning() - 警告响应

快速构建警告响应,默认状态码400。

复制代码
// 基础用法
$res = Message::warning()->result();
// ['code' => 400, 'msg' => '操作警告']

// 自定义警告信息
$res = Message::warning('数据将被覆盖')->result();
// ['code' => 400, 'msg' => '数据将被覆盖']
Message::info() - 信息响应

快速构建信息响应,默认状态码200。

复制代码
// 基础用法
$res = Message::info()->result();
// ['code' => 200, 'msg' => '提示信息']

// 自定义提示信息
$res = Message::info('操作已接受,处理中')->result();
// ['code' => 200, 'msg' => '操作已接受,处理中']
setCode() - 设置状态码

自定义响应状态码,支持基础码(200/400/500)和6位业务码。

复制代码
// 设置基础状态码
$res = Message::success()->setCode(201)->result();
// ['code' => 201, 'msg' => '操作成功']

// 设置业务状态码
$res = Message::error()->setCode(800000)->result();
// ['code' => 800000, 'msg' => '操作失败']
setMsg() - 设置消息

自定义响应消息文本。

复制代码
// 基础用法
$res = Message::success()->setMsg('创建成功')->result();
// ['code' => 200, 'msg' => '创建成功']

// 动态消息
$res = Message::error()->setMsg('用户ID不存在')->result();
// ['code' => 400, 'msg' => '用户ID不存在']
setData() - 设置数据

设置业务数据内容。

复制代码
// 基础用法
$res = Message::success()->setData(['id' => 123, 'name' => '测试'])->result();
// ['code' => 200, 'msg' => '操作成功', 'data' => ['id' => 123, 'name' => '测试']]

// 空数据
$res = Message::success()->setData(null)->result();
// ['code' => 200, 'msg' => '操作成功', 'data' => null]
setPage() - 设置分页

设置分页信息。

复制代码
// 基础用法
$res = Message::success()->setPage(['page' => 1, 'size' => 20, 'total' => 100])->result();
// ['code' => 200, 'msg' => '操作成功', 'page' => ['page' => 1, 'size' => 20, 'total' => 100]]
toJson() - 输出JSON

直接输出JSON格式响应。

复制代码
// 基础用法
echo Message::success()->toJson();
// 输出: {"code":200,"msg":"操作成功"}

// 带数据的JSON
echo Message::success(['id' => 123])->toJson();
// 输出: {"code":200,"msg":"操作成功","data":{"id":123}}
特性
  • ✅ 双模式链式调用:实例链式 + 静态链式

  • ✅ 完整的状态码管理(200/400/500基础码 + 6位业务码)

  • ✅ 灵活的字段扩展和映射

  • ✅ 内置分页支持

  • ✅ 支持JSON直接输出

  • ✅ PHP8.3+特性优化:只读属性、类型细化、nullsafe运算符

  • ✅ 线程安全的初始化模式

Curl模块

核心方法
方法名 功能描述 调用示例
get() GET请求 Curl::get('https://api.example.com')->send()
post() POST请求 Curl::post('https://api.example.com', $data)->send()
put() PUT请求 Curl::put('https://api.example.com/1', $data)->send()
delete() DELETE请求 Curl::delete('https://api.example.com/1')->send()
patch() PATCH请求 Curl::patch('https://api.example.com/1', $data)->send()
head() HEAD请求 Curl::head('https://api.example.com')->send()
options() OPTIONS请求 Curl::options('https://api.example.com')->send()
multi() 并发请求 Curl::multi()->add()->execute()
retry() 自动重试 Curl::get()->retry(3, 2.0)
body() 获取响应体 $response->body()
json() 获取JSON $response->json()
header() 获取响应头 $response->header('Content-Type')
statusCode() 获取状态码 $response->statusCode()
特性
  • ✅ 支持HTTP/HTTPS协议

  • ✅ 支持GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS请求

  • ✅ 支持请求超时设置

  • ✅ 支持请求头设置

  • ✅ 支持请求参数设置

  • ✅ 支持响应状态码、响应头、响应体获取

  • ✅ 支持异常处理

  • ✅ 支持多种HTTP方法(GET/POST/PUT/PATCH/DELETE)

  • ✅ 支持多种内容类型(JSON/form/multipart)

  • ✅ 灵活的请求选项配置

  • ✅ 响应处理和错误处理

  • ✅ 并发请求支持

  • ✅ PHP 8.5+持久化句柄支持(curl_share_init_persistent)

  • ✅ 重试机制和超时控制

  • ✅ SSL验证和代理支持

  • ✅ 双模式调用:实例调用 + 静态调用

Qrcode模块

核心方法
方法名 功能描述 调用示例
create() 创建二维码 Qr::create('Hello World')
size() 设置大小 Qr::create('Hello')->size(300)
margin() 设置边距 Qr::create('Hello')->margin(20)
foregroundColor() 设置前景色 Qr::create('Hello')->foregroundColor(255, 0, 0)
backgroundColor() 设置背景色 Qr::create('Hello')->backgroundColor(255, 255, 255)
errorCorrectionLevel() 设置错误纠正级别 Qr::create('Hello')->errorCorrectionLevel(5)
logo() 添加Logo Qr::create('Hello')->logo('path/to/logo.png')
label() 添加标签 Qr::create('Hello')->label('标签文字')
save() 保存为文件 Qr::create('Hello')->save('qrcode.png')
toString() 输出图片数据 $qr->toString()
toDataUri() 生成Base64编码 $qr->toDataUri()
asSvg() 输出SVG格式 Qr::create('Hello')->asSvg()
asWebP() 输出WebP格式 Qr::create('Hello')->asWebP()
asEps() 输出EPS格式 Qr::create('Hello')->asEps()
url() URL二维码 Qr::url('https://example.com')
wifi() WiFi二维码 Qr::wifi('MyWiFi', 'password', 'wpa')
email() 邮件二维码 Qr::email('user@example.com', '主题', '内容')
phone() 电话二维码 Qr::phone('13800138000')
sms() 短信二维码 Qr::sms('13800138000', '短信内容')
geo() 位置二维码 Qr::geo(39.9042, 116.4074)
bitcoin() 比特币二维码 Qr::bitcoin('address', 0.5)
event() 日历事件二维码 Qr::event('标题', '开始时间', '结束时间', '地点')
特性
  • ✅ 支持多种二维码大小

  • ✅ 支持多种错误纠正级别

  • ✅ 支持添加Logo

  • ✅ 支持自定义颜色

  • ✅ 支持多种输出格式(PNG、SVG、EPS)

  • ✅ 支持Base64编码输出

  • ✅ 基础二维码生成(文本、URL)

  • ✅ 多种样式定制:

    • ✅ 圆角点样式(圆形、圆角方形)

    • ✅ 渐变颜色支持(水平/垂直/对角线方向)

    • ✅ 自定义前景/背景颜色

    • ✅ Logo嵌入支持

    • ✅ 标签文字支持

  • ✅ 多种输出格式(PNG/SVG/WebP/EPS)

  • ✅ 多种数据类型支持:

    • ✅ URL二维码

    • ✅ WiFi二维码

    • ✅ 邮件二维码

    • ✅ 电话二维码

    • ✅ 短信二维码

    • ✅ 名片二维码(vCard)

    • ✅ 位置二维码

    • ✅ 比特币二维码

    • ✅ 日历事件二维码

  • ✅ 多种错误纠正级别(L/M/Q/H)

  • ✅ PHP8.3+特性优化:只读属性、类型声明

  • ✅ 双模式调用:实例调用 + 静态调用

  • ✅ 全局助手函数支持

Helper::全局助手函数

  • ✅ 简化调用方式,无需实例化

  • ✅ 自动加载,无需手动导入

  • ✅ 支持所有核心功能的快捷调用

安装

1. Composer 安装

复制代码
composer require kode/tools

2. 手动安装

将 src/ 目录下的文件复制到你的项目中,并配置自动加载。

模块结构建议

当前架构的优势

当前的模块化架构具有以下优势:

  1. 职责单一:每个模块专注于特定领域的功能,代码更清晰,维护更方便

  2. 解耦性高:模块之间依赖关系明确,便于独立测试和升级

  3. 可扩展性强:可以轻松添加新的模块或扩展现有模块

  4. 性能优化:按需加载,减少不必要的资源占用

  5. 团队协作:多人开发时可以并行处理不同模块

最佳实践

  1. 保持模块独立性:每个模块应尽量减少对其他模块的依赖

  2. 统一命名规范:所有模块采用一致的命名方式和编码风格

  3. 文档化:为每个模块和方法编写清晰的文档

  4. 测试覆盖:为每个模块编写单元测试

  5. 版本控制:定期更新和维护模块版本

感谢大家阅读,个人观点仅供参考,欢迎在评论区发表不同观点。

相关推荐
云游云记2 小时前
ThinkPHP 嵌套集合模型(Nested Set Model)适配用户邀请关系
php·嵌套集合·无限级
迪巴拉15252 小时前
抗社交网络压缩的鲁棒对抗扰动生成研究
网络·人工智能·php
podoor2 小时前
php版本升级后page页面别名调用出错解决方法
开发语言·php·wordpress
云游云记3 小时前
在FastAdmin ThinkPHP5环境下 关联查询 软删除未生效
php·fastadmin·软删除
石牌桥网管4 小时前
正则表达式:匹配不包含指定字符串的文本
java·javascript·python·正则表达式·go·php
m0_738120721 天前
sqli-labs过关解析(17- 20附带源码解析)
数据库·sql·web安全·php·ctf·安全性测试
lucky67071 天前
Laravel 9.x LTS重磅升级:六大核心改进
java·php·laravel
Zhu_S W1 天前
Java图论基础:有向图与无向图详解
开发语言·php
lucky67071 天前
Laravel5.x核心特性全解析
mysql·php·laravel