Rule Engine is a PHP library designed to evaluate complex rules and propositions. It supports various operators and can handle propositions and variables.
This model is based on rule archetype pattern from book "Enterprise Patterns and MDA: Building Better Software with Archetype Patterns and UML" by Jim Arlow and Ila Neustadt.
- PHP 8.3 or higher
- Composer
To install the library, use Composer:
composer require jakubciszak/rule-engine
This implementation use Reverse Polish Notation (RPN).
RPN is a mathematical notation in which operators follow their operands. This notation eliminates the need for parentheses that are used in standard infix notation, making the evaluation of expressions simpler and more efficient.
For example, the expression
(2 + 3) * 5
in standard notation would be written as
2 3 + 5 *
in RPN.
In this notation, you first add 2 and 3 to get 5, and then multiply by 5 to get 25.
The Rule Engine uses RPN to simplify the process of building conditions, making it more intuitive to construct complex logical expressions.
You can create rules using the provided methods for different operators:
use JakubCiszak\RuleEngine\Rule;
use JakubCiszak\RuleEngine\Operator;
$rule = (new Rule())
->variable('expectedAge', 22)
->variable('age')
->greaterThan()
->evaluate($context);
To evaluate a rule, you need to provide a RuleContext
:
use JakubCiszak\RuleEngine\RuleContext;
$context = new RuleContext();
$result = $rule->evaluate($context);
To run the tests, use PHPUnit:
vendor/bin/phpunit
Contributions are welcome! Please open an issue or submit a pull request.
This project is licensed under the MIT License.
- Jakub Ciszak - j.ciszak@gmail.com
- The project uses the
munusphp/munus
library for functional programming constructs. - The source code is located in the
src/
directory. - Tests are located in the
tests/
directory.