一个小项目的记录: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 分账组件
  • 核心就是 策略模式 + 可注册自定义策略
  • 分享出来,也是记录自己技术历程,同时方便别人参考

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

相关推荐
两个人的幸福10 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo13 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack13 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户30745969820713 天前
PHP 扩展——从入门到理解
php
鹏仔先生14 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下14 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip14 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
酉鬼女又兒15 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
dog25015 天前
不要再继续优化 TCP
网络协议·tcp/ip·php
Channing Lewis15 天前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel