PHP 規則引擎 Hoa Ruler

2021-09-17 00:07:19 字數 2273 閱讀 1652

hoa\ruler 是匹配特定語法的字串,hoa\ruler\ruler 定義語言語法描述,hoa\ruler\context 定義變數值,hoa\ruler\ruler::assert執行並獲得結果,結果是乙個布林值。

tp5 框架**:

use hoa\ruler\context;

use hoa\ruler\ruler;

class index

; $r = $ruler->assert($rule, $context);

print_r($r);

}}grammar(語法):

語法說明

'foo',"foo",'f\'oo'字串

true,false,null預先定義的常量

4.2小數

42整數

['foo', true, 4.2, 42]陣列

sum(1, 2, 3)呼叫函式並給定引數

points

變數points['x']陣列指定元素

line.pointa訪問物件屬性

line.length()訪問物件方法

and,or,xor,not邏輯運算子

=,!=,>,<,>=,<=比較運算子

is,in成員操作符

context(物件):

定義規則中變數的值。

1:常量、數字、字串等標量,或陣列、物件等結構化型別。

2:也可以是函式返回的值。

use hoa\ruler\context;

use hoa\ruler\ruler;

use hoa\ruler\dynamiccallable;

class index

; var_dump(

$context['int'],

$context['int'],

$context['int'],

$i);

$i = 0;

$context['int'] = new dynamiccallable(

function () use (&$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(新增自定義方法):

樣例如下:

class user

}use hoa\ruler\context;

use hoa\ruler\ruler;

use hoa\ruler\dynamiccallable;

use hoa\ruler\visitor\asserter;

class index

; $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

mysql 規則引擎 為什麼使用規則引擎?

一天,朱斯參加了一場code review研討會。會上的一群人正在討論著如何對祖傳 進行變更,大家你一言,我一語,場面十分熱鬧!突然,只見人群中的乙個人滿面愁容,說道 昨天在專案中看到下面這樣一段 分支太多了!維護起來很煩啊!if day 周一 else if day 周二 else if day ...

規則引擎pyke

1.官網 2.安裝第三方包 pyenv global anaconda3 4.2.0 pip install htmltemplate 3.原始碼安裝pyke pyenv global anaconda3 4.2.0 cd pyke3 1.1.1 python setup.py build pyth...

規則引擎 easy rules

直接看官方的例子。經典的例子 大致的步驟 建立各種規則,即rule.可以通過 pojo 或 rulebuilder api 兩種方式建立。建立規則容器rules rules new rules 註冊建立的規則rules.add rule 建立流,即facts.流控制規則的引數輸入.facts fac...