jcubic / expression
安全评估数学、字符串和布尔表达式
2.0.0
2024-01-06 18:46 UTC
Requires
- smuuf/php-peg: ^3.0
Requires (Dev)
- phpunit/phpunit: ^10.3
This package is auto-updated.
Last update: 2024-09-27 16:23:34 UTC
README
描述
当您想从不受信任的来源评估数学或布尔表达式时,请使用 Expression 类。您可以在对象中定义自己的变量和函数。
特性
- 整数和浮点数
- 数学表达式:
*/-+%,^和** - 布尔表达式:
&&,||和! - 比较:
><==!=<=>= - 严格比较
===和!== pi和e常量- 正则表达式和匹配操作符
=~ - 字符串字面量
- JSON 对象和数组
- 对象和数组上的方括号操作
- 位移操作符
>><< - 等号操作符在数组和对象上生效
- 函数和变量
安装
composer require jcubic/expression
使用方法
<? require_once(__DIR__ . "/vendor/autoload.php"); use jcubic\Expression; $e = new Expression(); // basic evaluation: $result = $e->evaluate('2+2'); // supports: order of operation; parentheses; negation; built-in functions $result = $e->evaluate('-8(5/2)^2*(1-sqrt(4))-8'); // support of booleans $result = $e->evaluate('10 < 20 || 20 > 30 && 10 == 10'); // support for strings and match (regexes can be like in php or like in javascript) $result = $e->evaluate('"Foo,Bar" =~ /^([fo]+),(bar)$/i'); // previous call will create $0 for whole match match and $1,$2 for groups $result = $e->evaluate('$2'); // create your own variables $e->evaluate('a = e^(ln(pi))'); // or functions $e->evaluate('f(x,y) = x^2 + y^2 - 2x*y + 1'); // and then use them $result = $e->evaluate('3*f(42,a)'); // create external functions $e->functions['foo'] = function() { return "foo"; }; // and use them $result = $e->evaluate('foo()');
方法
$e->evalute($expr)
评估表达式并返回结果。如果发生错误,则打印警告并返回 false。如果 $expr 是函数分配,则成功时返回 true。
$e->e($expr)
$e->evaluate() 的同义词。
$e->vars()
返回一个关联数组,包含所有用户定义的变量和值。
$e->funcs()
返回一个包含所有用户定义函数的数组。
参数
$e->suppress_errors
设置为 true 以在评估表达式时关闭警告
$e->last_error
如果上次评估失败,包含描述错误的字符串。(当 suppress_errors 打开时很有用)。
$e->functions
包含外部定义函数的关联数组。
$e->variables
包含用户定义和外部定义变量的关联数组。
历史
此项目最初是一个分支。原始代码由 Miles Kaufmann 创建,并在 PHPClasses.org 上发布。我在原始代码中添加了许多功能和错误修复,但后来决定代码很难修改以添加新功能和修复错误。因此,我决定从头开始使用 PEG 解析器生成器重写一切。
原始代码仍可在 packagist 上的版本 1.0 上找到,源代码可在 遗产分支 中找到。
致谢
- 标志使用
- 来自 Clarity 图标集 的图标
- Prosto one 字体 由 Pavel Emelyanov 设计
- 公共 API 来自 Miles Kaufmann 的原始代码
许可证
版权 (c) 2024 Jakub T. Jankiewicz
在 MIT 许可下发布