
这是一个基于 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/ 目录下的文件复制到你的项目中,并配置自动加载。
模块结构建议
当前架构的优势
当前的模块化架构具有以下优势:
-
职责单一:每个模块专注于特定领域的功能,代码更清晰,维护更方便
-
解耦性高:模块之间依赖关系明确,便于独立测试和升级
-
可扩展性强:可以轻松添加新的模块或扩展现有模块
-
性能优化:按需加载,减少不必要的资源占用
-
团队协作:多人开发时可以并行处理不同模块
最佳实践
-
保持模块独立性:每个模块应尽量减少对其他模块的依赖
-
统一命名规范:所有模块采用一致的命名方式和编码风格
-
文档化:为每个模块和方法编写清晰的文档
-
测试覆盖:为每个模块编写单元测试
-
版本控制:定期更新和维护模块版本
感谢大家阅读,个人观点仅供参考,欢迎在评论区发表不同观点。