星河避难所

返回

判断逻辑越写越乱,我干脆做了个自己的规则引擎Blur image

不知道你有没有这种感觉:一个业务功能看起来很简单,但判断条件却一大堆。
什么用户状态、配置项、商品属性、会员等级……
一大堆 if​ / else​ 交织在一起,越写越乱,稍微改一个逻辑就要担心影响其他地方。

我之前就遇到这样的情况,一开始还能忍,后来干脆决定:不如自己写一个简单的规则引擎,专门用来处理这些组合判断。

于是就有了这个项目:hejunjie/simple-rule-engine


🚀 这个规则引擎能干嘛?#

一句话总结:
这是一个轻量、易用的 PHP 规则引擎,支持多条件组合、动态规则执行,适合业务规则判断、数据校验等场景。

适合用在你项目中的这些地方:

  • 复杂业务的多条件判断(比如用户是否满足某个活动要求)
  • 数据入库前的规则校验
  • 自定义逻辑的配置化、结构化处理
  • 写得一手 if 地狱,想抽出来整整齐齐 😅

🌟 为什么要做它?#

在实际业务中,很多业务判断逻辑其实都可以归纳为:“一堆字段 + 一些规则 + 多个条件组合”。

原本我们可能是这么写的:

if (
    $user['status'] === 'active' &&
    $user['age'] >= 18 &&
    in_array($user['role'], ['admin', 'editor'])
) {
    // ...
}
php

现在可以这样:

是不是整洁多了?而且如果你把规则放数据库,就能实现“业务判断配置化”了。


🧩 项目特点#

  • 轻量易用:无依赖,无框架限制,简单几行就能用
  • 🔌 工厂注册机制:你可以自己写新的操作符(Operator)注册进来
  • 📦 内置常用操作符:多数常用操作符都支持(可见文章末尾操作符支持列表)
  • 🧠 可组合、多条件支持:支持 AND / OR 关系组合,扩展多套规则逻辑很方便

📦 安装方法#

composer require hejunjie/simple-rule-engine
bash

🛠️ 示例代码#


🔌 自定义操作符#

你可以自由的去实现自己的判断逻辑,指定一个操作符,并自由的插入到你的规则中

仅需要实现 OperatorInterface​ 接口,并通过 OperatorFactory​ 注册即可:


🧩 内置操作符列表#

操作符描述额外说明
==等于
!=不等于
>大于
>=大于等于
<小于
<=小于等于
in包含于集合中数组:[内容 1,内容 2,…]
not_in不包含于集合中数组:[内容 1,内容 2,…]
contains包含字符串
not_contains不包含字符串
start_swith以指定字符串开头
end_swith以指定字符串结尾
between在指定范围内数组:[最大值,最小值]
not_between不在指定范围内数组:[最大值,最小值]
before_date日期早于任意常规日期格式,包括时间戳均可
after_date日期晚于任意常规日期格式,包括时间戳均可
date_equal日期相等任意常规日期格式,包括时间戳均可

🤔 总结一下#

这个规则引擎不是为了解决多么高级的技术难题,它只是一个更优雅的解决方式
如果你也遇到过类似的 if/else 困扰,希望这个小工具能帮上你一点忙。


欢迎 Star、Issue、PR,一起完善它 🙌
如果你觉得有帮助,点个赞我会更有动力更新下去~

判断逻辑越写越乱,我干脆做了个自己的规则引擎
http://www.hejunjie.life/blog/da4e917a
作者 何俊杰
发布时间 2025年4月30日
版权信息 CC BY-NC-SA 4.0
评论似乎卡住了,尝试刷新?✨