ibthedatacompany / bcmath-formula-interpreter
PHP 的 BC-Math 公式解释器
Requires
- php: ^8.0
Requires (Dev)
- phpstan/phpstan: ^0.12.11
- phpstan/phpstan-phpunit: ^0.12.6
- phpunit/phpunit: ^7.5|^8.5
- symfony/class-loader: 2.1.*
Suggests
- ext-bcmath: BC-Math PHP extension
This package is not auto-updated.
Last update: 2024-09-25 09:14:45 UTC
README
一个使用 BC-Math 的 PHP 公式解释器
这个库是基于 mormat/php-formula-interpreter 的分支,并进行了调整以使用 BC-Math。如果您需要一个不需要任意精度数学的类似库,请使用该库。
为什么使用这个库?
一些用户可能想要执行简单的计算并尽可能多地更改它。在使用库之前,您可以使用 eval
函数。但这种方法有两个主要缺点:
安全性。PHP 脚本正在通过 eval 函数进行评估。PHP 是一种非常强大的语言,可能对于用户来说过于强大,尤其是当用户想要注入恶意代码时。
复杂性。对于不懂得编程语言的人来说,PHP 也非常复杂。解释类似于 Excel 的公式可能更好。
要求
- PHP >= 7.0
- BC-Math PHP 扩展
安装
安装此库的推荐方法是使用 composer。
运行 Composer 命令以安装公式解释器
composer require ibthedatacompany/bcmath-formula-interpreter
它是如何工作的?
首先,创建一个 \IB\FormulaInterpreter\Compiler
的实例
$compiler = new \IB\FormulaInterpreter\Compiler();
然后使用 compile()
方法解析您想要解释的公式。它将返回一个 \IB\FormulaInterpreter\Executable
的实例
$executable = $compiler->compile('2 + 2');
最后从可执行文件运行公式
$result = $executable->run();
// $result equals 4
使用运算符
运算符乘法 (*) 和除法 () 先被评估,然后是加法 (+) 和减法 (-)
您还可以通过使用括号来强制表达式的优先级,如下所示
'2 * (3 + 2)'
您可以随意使用任意数量的括号。
'2 * (2 * (3 + 2 * (3 + 2)) + 2)'
其他运算符如取模、幂等将在将来作为函数实现。
使用变量
变量只是公式中的一个单词,如下所示
'price * rate / 100'
在执行公式之前,请确保将所有必需的变量注入到数组中
$variables = [
'price' => '40.2',
'rate' => '12.8'
];
$executable->run($variables);
请注意,所有变量都应该是数值字符串表示形式。
使用函数
以下是一个使用函数的表达式示例
'cos(0)'
可用函数:pi
、pow
、cos
、sin
、sqrt
和 modulo
您可以随意嵌入函数。
'pow(sqrt(4), 2)'
列出参数
您可以通过获取必须提供给 run()
方法的所有变量列表来运行可执行文件
$executable = $compiler->compile('foo + bar');
print_r($executable->getParameters());
这将输出
Array
(
[0] => foo
[0] => bar
)
许可协议
MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件。