美文网首页
规则引擎升级版(直接能跑)

规则引擎升级版(直接能跑)

作者: 嫻愔 | 来源:发表于2019-06-14 17:31 被阅读0次
<?php

class check_rule_class {

}

class rule{

    public static function check($rule, $obj) {
        $res = false;
        if (preg_match("/^\(([a-zA-Z0-9_]+)\s*(((\=|\>|\<|\>=|\<=)\s*\'?[a-zA-Z0-9\-\s\:]+\'?)|(in\s*\[(\'?[a-zA-Z0-9\-]+\'?\s*\,?\s*)+\]))\)$/", $rule, $matches)) {
            $attribute = $matches[1];
            if (strpos($rule, 'in') !== false) {
                $rArr = explode('in', $rule);
                $paramStr = str_replace(array('[', ']', ')', ' ', '\'', '\''), '', $rArr[1]);
                $paramArr = explode(',',$paramStr);
                $res = in_array($obj->$attribute, $paramArr);
            } else {
                $r = $rule;
                if (preg_match('/[a-zA-Z0-9_]+\s*=/', $rule, $params)) $r = str_replace('=', '==', $rule);
                $atibute = $obj->$attribute;
                $res = eval('return ($atibute'.str_replace($attribute, '', substr($r, 1)).";");
            }
        }
        return $res;
    }

    public static function check_rule($ruleStr, $ruleClass) {
        $GLOBALS['log']->fatal('start-check-rule-------'.$ruleStr);
        if (preg_match_all("/\([a-zA-Z0-9_]+\s*(((=|\>|\<|\>=|\<=)\s*\'?[a-zA-Z0-9\-\s\:]+\'?)|(in\s*\[(\'?[a-zA-Z0-9\-]+\'?\s*\,?\s*)+\]))\)/", $ruleStr, $rules)) {
            foreach ($rules[0] as $rule) {
                $ruleRes = self::check($rule, $ruleClass);
                $ruleStr = str_replace($rule, (int)$ruleRes, $ruleStr);
            }
            $GLOBALS['log']->fatal('the-end-rule-----'.$ruleStr);
            if (!preg_match('/[^(0|1|and|or|!|\(|\)|\s)]/', $ruleStr)) {
                return eval('return '.str_replace(array('and', 'or'), array(' and ', ' or '), $ruleStr).";");
            }
        }
        return false;
    }
}

/**
 * 调用示例
 $class = new check_rule_class();
$class->a = '2';
$class->b = 5;
$res = rule::check_rule("!(a=2) or (b in [2, '5'])", $class);
var_dump($res); */

利用了php的魔术方法

相关文章

  • 规则引擎升级版(直接能跑)

    利用了php的魔术方法

  • 谈一谈规则引擎在活动系统中的落地

    本文从 “为什么需要规则引擎” “规则引擎的定义” “规则引擎在营销活动系统中的落地” “规则引擎平台内部架构” ...

  • php写个简单的规则引擎demo

    1、规则引擎简介 规则引擎是一种推理引擎,它是根据已有的事实,从规则知识库中匹配规则,并处理存在冲突的规则,执行最...

  • Java常用的规则引擎

    概述 在本文中,我们将介绍Java中一些最受欢迎的规则引擎。 规则引擎简介 规则引擎由推理引擎发展而来,是一种嵌入...

  • 规则引擎的优缺点

    为何要使用规则引擎? 讨论规则引擎时,下边这些问题经常被提及: 什么时候应当使用规则引擎? 相较与使用使用“if....

  • 自学Java项目之规则引擎

    项目:规则引擎专题 规则引擎,全称为业务规则管理系统,英文名BRMS(Business Rule Manageme...

  • 规则引擎

    场景 业务风控,主要是下单、支付、优惠券、红包、签到等行为的风险控制,对抗的风险行为包括黄牛刷单、恶意占用库存、机...

  • 规则引擎

    1.正向链、反向链 2.误差的分类 4.复合概率

  • 规则引擎

    什么是规则引擎? 所谓的规则引擎就是一组规则加上一组动作, 当某种规则被满足后触发某个动作 业务痛点 多变的需求 ...

  • 规则引擎

    规则引擎https://www.yuque.com/yangdakang/kb/bstdgr[https://ww...

网友评论

      本文标题:规则引擎升级版(直接能跑)

      本文链接:https://www.haomeiwen.com/subject/xugpfctx.html