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

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

相关推荐
007php0076 小时前
某游戏大厂 Java 面试题深度解析(四)
java·开发语言·python·面试·职场和发展·golang·php
骷大人12 小时前
php安装skywalking_agent
开发语言·php·skywalking
移远通信13 小时前
常见问题解答
开发语言·php
KevinLyu20 小时前
PHP内核详解· 内存管理篇(五)· 释放内存
php
IDOlaoluo1 天前
PHP-5.2.1.tar.gz 离线安装教程:从源码编译到配置的详细步骤(附安装包)
开发语言·php
JaguarJack2 天前
PHP 基金会宣布:Streams 现代化 将引入事件循环与异步新能力
后端·php
亿坊电商2 天前
PHP后端项目中多环境配置管理:开发、测试、生产的优雅解决方案!
服务器·数据库·php
ZIM学编程2 天前
「学长有话说」作为一个大三学长,我想对大一计算机专业学生说这些!
java·c语言·数据结构·c++·python·学习·php
普普通通的南瓜3 天前
《国家安全法》下的 SSL 证书定位:网络数据加密的 “法定基石”
网络·php·ssl
BingoGo3 天前
PHP 组件未来:Livewire 4 正式发布,性能更快,功能更完整
后端·php