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

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

相关推荐
电商API&Tina13 小时前
京东 API 数据采集接口接入与行业分析
运维·服务器·网络·数据库·django·php
Sammyyyyy18 小时前
Symfony AI 正式发布,PHP 原生 AI 时代开启
开发语言·人工智能·后端·php·symfony·servbay
码农水水20 小时前
大疆Java面试被问:TCC事务的悬挂、空回滚问题解决方案
java·开发语言·人工智能·面试·职场和发展·单元测试·php
do better myself21 小时前
php 使用IP2Location限制指定的国家访问实现
开发语言·php
用户14644605033791 天前
PHP 多维数组处理利器:array_column() 用法详解
php·thinkphp
郑州光合科技余经理1 天前
架构解析:同城本地生活服务o2o平台海外版
大数据·开发语言·前端·人工智能·架构·php·生活
智能修复1 天前
502 Bad Gateway:互联网世界的“断桥”时刻
开发语言·php
源码师傅1 天前
AI短剧创作系统源码 开发语言:PHP+MySQL 基于uniapp 无限SAAS多开源码
人工智能·php·短剧小程序开发·ai短剧创作系统源码·ai短剧创作系统·短剧原创制作软件
BingoGo1 天前
PHP 8.5 #[\NoDiscard] 揪出"忽略返回值"的 Bug
后端·php
星辰烈龙2 天前
黑马程序员JavaSE基础加强d5
服务器·网络·php