一个小项目的记录:PHP 分账组件

最近整理了一个自己做的小项目------PHP Trade Splitter ,是一个交易/利润分账组件。今天想分享一下,也算是记录自己的小成果,也顺便展示一下技术思路。


为什么会做这个包

说白了,就是因为工作/项目里老是碰到分账逻辑:

  • 平台抽成
  • 作者收益
  • 代理或渠道分润
  • 阶梯奖励
  • 多级递归计算

以前都是直接写死在业务里,每次改需求都得重构,越改越心累。

于是我想:干脆抽象出来,做一个通用组件,能够:

  1. 快速调用,一行代码搞定分账
  2. 可扩展,能注册自定义策略
  3. 覆盖大多数常见分账规则

顺便用它自己解决问题,也方便别人参考。


架构思路:策略模式解耦

核心思想其实挺简单:策略模式

  • Splitter:统一入口,负责分账调度
  • StrategyInterface:所有分账规则都实现它
  • SplitContext:封装分账上下文(总额、参与者)
  • Allocation:分账结果对象,支持 toArray() 输出

好处就是,如果以后出现新规则,直接写个策略类注册进去就行,不用动核心逻辑。

概念上可以想象成这样:

复制代码
├─ Splitter.php                # 统一入口,负责分账调度
├─ Contracts/
│  └── StrategyInterface.php   # 所有分账规则都实现它
├─ Models/
│  ├── Allocation.php          # 分账结果对象,支持 `toArray()` 输出
│  └── SplitContext.php        # 封装分账上下文(总额、参与者)
└─ Strategies/                 # 内置策略类(Percentage, Fixed, Ladder, Recursive)

内置策略概览

组件内置了四种策略,覆盖绝大多数场景:

1️⃣ 百分比分账(Percentage)

按比例分配金额。例如 10% 给平台,90% 给作者。

适合固定比例抽成场景。

2️⃣ 固定金额分账(Fixed)

直接指定每个人的金额。总和不能超过总额。

适合代理固定提成或奖励金额场景。

3️⃣ 阶梯分账(Ladder)

根据金额区间设置不同分成比例,适合阶梯奖励或多级代理。

比如收入低于 1k 用 5%,收入 1k~5k 用 10%,超过 5k 用 15%。

4️⃣ 递归分账(Recursive)

适合多级渠道分润,每层收益基于上一层金额计算,然后得到净收益。

避免嵌套循环写复杂逻辑,非常清晰。

如果你想看具体代码示例,我在仓库里提供了 demo:tests/demo.php


自定义策略

除了内置策略,你也可以写自己的策略类,只要实现接口就可以注册。

比如你想写一个"全部给某个人"的策略:

概念上就是实现一个接口,然后返回总额给指定对象,调用方式和内置策略一致。


使用体验

  • 一行代码即可完成分账
  • 分账结果可以直接转换为数组或 JSON,方便存储或返回
  • 异常情况和边界条件都有处理,比如比例不合法、总额超出等

分享感想

其实这个包本身逻辑不复杂,但价值在于解决重复痛点

  • 遇到分账问题不用每次重写逻辑
  • 可维护性提升
  • 自己和别人都能快速上手

所以即便是小组件,也可以体现技术思路和设计能力。


总结

  • 这是一个 轻量、灵活、可扩展的 PHP 分账组件
  • 核心就是 策略模式 + 可注册自定义策略
  • 分享出来,也是记录自己技术历程,同时方便别人参考

如果你也碰到分账痛点,或者想看看策略模式在小项目里的应用,可以去看看

相关推荐
门思科技44 分钟前
LoRaWAN 网络容量估算:一个 SX1302 网关到底能带多少设备
开发语言·网络·php
ID34610744206 小时前
【课程设计】基于Spring Boot+Vue的校园共享无人机服务系统设计与实现-计算机毕设 附源码44219
javascript·vue.js·spring boot·python·node.js·php·课程设计
sbjdhjd7 小时前
ThinkPHP 5.0.10 缓存写入型 RCE 复盘:从手动搭建、换行绕过到源码单步验证 | 05
java·后端·安全·spring·网络安全·数据挖掘·php
en.en..8 小时前
TCP/UDP 收发流程(网络字节序---函数讲解)
开发语言·php
en.en..8 小时前
TCP/IP四层模型「数据包封装与拆包」| 网络传输
服务器·网络·php
aixingpan12 小时前
aixingpan.cn API开发文档:api_docs_trichart_natal_progression_ter_transit2接口指南
前端·php
gf132111112 小时前
python_调用远程服务器上的openclaw
服务器·python·php
czt_java12 小时前
网络核心初识:OSI七层、TCP/IP模型与数据传输全过程
网络·tcp/ip·php
Lysander.Jovian13 小时前
OpenStack使用_网页版
php·openstack
siner.li13 小时前
Mac通过brew安装的PHP8.0,编译安装swoole4
php