Hoa\Ruler 是匹配特定语法的字符串,Hoa\Ruler\Ruler 定义语言语法描述,Hoa\Ruler\Context 定义变量值, Hoa\Ruler\Ruler::assert 执行并获得结果,结果是一个布尔值。

TP5 框架代码:

namespace app\index\controller;use Hoa\Ruler\Context;
use Hoa\Ruler\Ruler;class Index
{public function index(){$ruler = new Ruler();$rule  = 'group in ["customer", "guest"] and points > 30';$context           = new Context();$context['group']  = 'customer';$context['points'] = function () {return 42;};$r = $ruler->assert($rule, $context);print_r($r);}
}

Grammar(语法):

语法 说明
'foo'"foo"'f\'oo' 字符串
truefalsenull 预先定义的常量
4.2 小数
42 整数
['foo', true, 4.2, 42] 数组
sum(1, 2, 3) 调用函数并给定参数
points 变量
points['x'] 数组指定元素
line.pointA 访问对象属性
line.length() 访问对象方法
andorxornot 逻辑运算符
=!=><>=<= 比较运算符
isin 成员操作符

Context(对象):
定义规则中变量的值。
1:常量、数字、字符串等标量,或数组、对象等结构化类型。
2:也可以是函数返回的值。

namespace app\index\controller;use Hoa\Ruler\Context;
use Hoa\Ruler\Ruler;
use Hoa\Ruler\DynamicCallable;class Index
{public function index(){$context        = new Context();$i              = 0;$context['int'] = function () use (&$i) {return ++$i;};var_dump($context['int'],$context['int'],$context['int'],$i);$i              = 0;$context['int'] = new DynamicCallable(function () use (&$i) {return ++$i;});var_dump($context['int'],$context['int'],$context['int'],$i);}
}>>>int(1) int(1) int(1) int(1) int(1) int(2) int(3) int(3)

Add functions(添加自定义方法):
样例如下:

namespace app\index\controller;class user
{const DISCONNECTED = 0;const CONNECTED    = 1;protected $_status = 1;public function getStatus(){return $this->_status;}
}
namespace app\index\controller;use Hoa\Ruler\Context;
use Hoa\Ruler\Ruler;
use Hoa\Ruler\DynamicCallable;
use Hoa\Ruler\Visitor\Asserter;
use app\index\controller\user;class Index
{public function index(){$logged = function (user $user) {return $user::CONNECTED === $user->getStatus();};$ruler = new Ruler();$rule  = 'logged(user) and points > 30';$context = new Context();$context['user'] = new user();$context['points'] = 42;$asserter = new Asserter();$asserter->setOperator('logged', $logged);$ruler->setAsserter($asserter);//简写:$ruler->getDefaultAsserter()->setOperator('logged', $logged);print_r($ruler->assert($rule, $context));}
}>>>1

PHP 规则引擎 Hoa\Ruler相关推荐

  1. drools规则引擎可视化_Springboot2(60)集成规则引擎Drools

    核心pom.xml 文件: <parent> <groupId>org.springframework.boot</groupId> <artifactId& ...

  2. 详解:Drools规则引擎探究

    引入 ▐ 问题引入 天猫奢品业务方为了吸引更多的新客,和提高会员的活跃度,做了一期活动,通过购买天猫奢品频道内的任意商品就赠送特殊积分,积分可以直接兑换限量的奢品商品.假如业务方给的规则如下: 主刃同 ...

  3. 规则就够用?还是必须上机器学习?46页ppt教你如何把规则引擎和机器学习融会贯通...

    来源:专知 本文附PPT,建议阅读5分钟 究竟是用简单有效的规则引擎就够了还是要上机器学习? 标签:机器学习 [ 导读 ]在实际的业务数据生产系统中,我们往往会碰到这样一个困境:究竟是用简单有效的规则 ...

  4. 几个常见规则引擎的简单介绍和演示

    Ilog JRules 是最有名的商用BRMS: Drools 是最活跃的开源规则引擎: Jess 是Clips的java实现,就如JRuby之于Ruby,是AI系的代表: Visual Rules( ...

  5. 规则引擎 drools_为什么要用规则引擎?

    作者:孤独烟来源:https://www.cnblogs.com/rjzheng/p/10996186.html 一天,朱斯参加了一场code Review研讨会.会上的一群人正在讨论着如何对祖传代码 ...

  6. java风控系统规则引擎_如何设计一套规则引擎系统

    很早之前就想写一篇关于「规则引擎」的文章,但是一直苦于没有时间.刚好最近给团队小伙伴梳理了我设计的引擎的使用和原理,正好借此机会在此写下我们的心得. 「规则引擎」系统一般而言,在风控中使用较多,但是经 ...

  7. 量身定制规则引擎,适应多变业务场景

    为什么80%的码农都做不了架构师?>>>    规则引擎适合于做业务规则频繁变化的场景,我们的业务在应用过程中,也经常要处理大量的业务规则,当然,也希望能有一套规则引擎来支撑,这样是 ...

  8. java 规则引擎_GitHub - javaso/rulegin: 分布式规则引擎系统,重构于开源IOT项目thingboard...

    一.背景 规则引擎是一种根据规则中包含的指定条件,判断其能否匹配运行时刻的实时条件来执行规则中所规定的动作, 用户可通过规则引擎设定消息处理规则, 对指定的消息采取相应的措施来对设备进行监控和处理,如 ...

  9. 从0到1:构建强大且易用的规则引擎

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 张宁 来源 | 公众号「zhisheng」 2 ...

最新文章

  1. bootstrap-datetimepicker时间控件添加清除按钮
  2. get_sheet_of_light_result_object_model_3d算子说明
  3. 课时 21:Kubernetes 存储架构及插件使用(阚俊宝)
  4. java序列化Serializable
  5. Oracle中的wmsys.wm_concat
  6. linux-basic(10)vim程序编辑器
  7. git 短写设置_如何在短短几分钟内设置一个Git客户端
  8. php分列显示,【杂谈】PHP数组怎样按键名完成降序分列
  9. 常用损失函数(Loss Function)
  10. KMP算法之NEXT数组代码原理分析 - 数据结构和算法38
  11. 微信html5切水果游戏,H5+JS切水果手机小游戏
  12. 如何高效率安排你的时间?Mac精品日程管理软件推荐
  13. 微信小程序 测试环境和正式环境 access_token冲突问题
  14. 基于opengl编写简单的二维绘图软件
  15. 八位全加器——python逻辑电路
  16. 博客园博客排版(js样式实例)
  17. CHD搭建的环境中,解决用户权限的问题
  18. js更换自定义鼠标指针图片
  19. 用Python画一个“中国福”,送给想要祝福的人吧
  20. 提升产品创新能力,试试斯坦福大学设计思维模型

热门文章

  1. Linux下/etc/mdev.conf学习
  2. 数据库,SQL语句的介绍
  3. 谷歌adsense作弊的方法
  4. 云智慧智能研究院:2022年智能运维发展八大趋势
  5. persepolis download manager中文版(pdm下载器)
  6. 接口测试,利用charles修改app的任意字段
  7. Fiddler无法抓手机APP数据包的解决办法
  8. 请问如何修复损坏的jpg文件
  9. 流量回放repeater的原理分析二:repeater源码分析
  10. [深度学习]Part1 Python学习进阶Ch24图像处理OpenCV(24.1~24.13)——【DeepBlue学习笔记】