ibthedatacompany/bcmath-formula-interpreter

PHP 的 BC-Math 公式解释器

2.0.0 2021-02-02 16:31 UTC

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)'

可用函数:pipowcossinsqrtmodulo

您可以随意嵌入函数。

   'pow(sqrt(4), 2)'

列出参数

您可以通过获取必须提供给 run() 方法的所有变量列表来运行可执行文件

$executable = $compiler->compile('foo + bar');

print_r($executable->getParameters());

这将输出

    Array
    (
        [0] => foo
        [0] => bar
    )

许可协议

MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件