Javascript 保存公式模式

Javascript 保存公式模式,javascript,php,coding-style,save,formula,Javascript,Php,Coding Style,Save,Formula,简短:我需要一种保存公式的方法,以便在需要时执行它们 细节:我正在为电子商务系统写一些东西,这样产品的价格就可以通过产品的体积来计算。我希望后端用户(管理员、产品销售商)能够为计算体积的不同方法设置自定义公式。[例如(A x B-C x D)*e;A x B x(C-D);]。它们在使用的运算(*,-,/,+)和公式中使用的变量数量上有所不同 我需要一种在PHP中保存这些公式(字符串显然是个坏主意)的方法,这样我可以在需要时使用它们(将a、B、C、D、E设置为值并获得结果),还可以将它们传递给J

简短:我需要一种保存公式的方法,以便在需要时执行它们

细节:我正在为电子商务系统写一些东西,这样产品的价格就可以通过产品的体积来计算。我希望后端用户(管理员、产品销售商)能够为计算体积的不同方法设置自定义公式。[例如
(A x B-C x D)*e;
A x B x(C-D);
]。它们在使用的运算(*,-,/,+)和公式中使用的变量数量上有所不同

我需要一种在PHP中保存这些公式(字符串显然是个坏主意)的方法,这样我可以在需要时使用它们(将a、B、C、D、E设置为值并获得结果),还可以将它们传递给Javascript并在那里使用它们


我非常感谢大家对如何做到这一点的意见。

哇,好问题!这里有一些想法

a) 元编程(这个词对吗?)

在JS中,您可以使用简单语句定义公式:

var f = new Function('a', 'alert(a)');
您可以编写一个启动脚本,读取所有的公式,然后直接加载(例如查询Web服务)。可以按预期调用此函数:

f('Here I am');
我学PHP已经很多年了,但我想你可以试试。当用户定义公式时,您可以在一个特殊文件夹中生成一个文件,其中包含表示该公式的PHP代码。如果PHP允许函数引用,则可以通过如下方式访问公式:

$formulaBag['MyFormula']('Here I am')
由于您允许用户在系统中插入代码,因此应避免“直接编程”。为用户提供用于公式定义的小型语言。完成后,您将触发一个进程,解析公式脚本并生成相应的JS和PHP代码

b) 动态解析

似乎您有一些性能问题。。。如果您定义一种简单的语言,用PHP解析它就不会那么困难了。您是否希望在长时间运行的流程中运行许多公式?如果不是,这可能是一个更好的选择,因为您不需要生成动态包含(安全风险?)。计算公式如下:

$res = ExecuteFormula($formula_name, $array_of_parameters)
[补充] 解析并没有那么困难。您将需要一个有限状态机和一个堆栈来在引导括号时“保留”临时值


嗯,我希望它能有所帮助。

为什么字符串是个坏主意?保存前先验证字符串(客户端和服务器)。@elclars因为如果我有一个字符串,例如“a x B x(C-D)”,我有五个变量$a=1、$B=2、$C=3、$D=4,那么让计算机计算1 x 2 x(3-4)将是一项艰巨而昂贵的任务。我需要一种保存公式的方法,这样我就可以轻松地使用公式进行计算如果您要在后端计算公式,您只需发送一个带有变量和公式的JSON对象,例如
{“公式”:“a+B”,“a”:1,“B”:2}
,然后在后端执行必要的操作。js在前端计算。变量A和B将由页面的最终用户设置。我希望有一种更简单的方法,而不是先将公式模式保存为字符串,然后编写一个单独的php和javascript函数(我必须能够计算两边的公式),将字符串(如“a+B+(C-D)”)转换为可用的公式。函数必须是
函数((字符串)公式,(数组)值)
,转换公式,将数组中的值设置为公式并进行计算。在PHP和javascript中。难道没有更好的方法来实现这一点吗?是的,如果您希望能够在客户端和服务器上进行计算,那么必须执行两次逻辑。在后端使用NodeJS将是另一回事,因为您可以在两端共享相同的JS代码。