4

我正在用 PHP 编写一个购物车,它的部分功能是计算一组给定产品的运费。对于启用了 Javascript 的用户,我希望通过在客户端完成准确的运费计算来提供最流畅的体验,以便购物车中的更改不需要页面重新加载或 AJAX 调用。

目前,我在 PHP 中有一个计算运费的函数,还有一个在 Javascript 中反映其功能的函数。我担心公式可能会经常更改,并且必须用两种不同的语言重写两个单独的函数(并确保它们的输出匹配)可能会产生可维护性问题。

我正在寻找的是一种以某种与语言无关的方式表示计算运费的公式的方法,以便它可以被 PHP 和 Javascript 解释。目前,运输公式只是单个变量(项目数量)的函数,尽管我希望能够添加更多而无需过多重写。

是否有一种可接受的方式来表示一个相当简单的数学公式,这种方式可以被 PHP 和 Javascript 解释?最好不写我自己的解释器?

编辑:我不需要一个完整的函数,只需要一个相当简单的数学公式,如“4 + 1.5n”。您会在典型的电子表格单元格中找到的那种东西。

4

5 回答 5

4

通常,您最好只维护两个版本的代码。当然,最优雅的解决方案是用 JavaScript 本身编写服务器逻辑(参见cappuccino.org);这对您来说是一个糟糕的选择,因为听起来您已经编写了大量的 PHP 代码。

但是,如果您真的觉得有必要解决这个问题,请考虑对服务器进行 AJAX 回调。虽然速度稍慢,但大多数用户不会注意到。

于 2009-10-13T04:47:18.083 回答
3

我会说在服务器端和用户 AJAX 上做,它不会对用户产生太大影响,但是当用户在提交订单后看到不同的计算时,维护两个版本会有所不同。

无论如何,如果您由于某种原因根本不想要 AJAX,最好的方法是拥有在客户端和服务器端都执行的单个 javascript 库。您可以在服务器端从 php 执行 javascript。例如,您可以使用 linux 中的以下命令来执行 javascript

http://www.mozilla.org/js/spidermonkey/ http://www.mozilla.org/rhino/ http://www.wxjavascript.net/

有关更多选项,请参见http://en.wikipedia.org/wiki/Server-side_JavaScript

于 2009-10-13T04:58:22.600 回答
1

这是一个坏主意,并且计算变得越复杂,这将成为一个更糟糕的主意。

话虽如此,Javascript 确实支持美元符号在变量名中是合法的。这两种语言之间有足够多的通用语法,只要您只处理简单的数学问题,您就可以轻松编写解析和工作方式相同的代码。数组可能有点棘手。查看PHP.JS,这是一组在 Javascript 中模仿 PHP 内置函数的库。

(编辑:我在指向 php.js 的链接中进行了编辑,但不知道其他人会在我的编辑过程中发布同样的内容。他的信用/恐怖。;))

于 2009-10-13T04:47:05.263 回答
1

也许。看看php.js。它为您提供了除 JavaScript 之外的所有 php 函数。

您也可以在 php 中编写整个验证,并使用 Ajax 在客户端进行查询。

于 2009-10-13T04:47:11.393 回答
1

有人会说现在是时候为您的应用程序添加一些自动化测试,并至少在每次您想将应用程序部署到生产服务器时运行它们——如果其中一些测试失败,请取消部署。

您将对 PHP 和 JS 代码进行测试,其中一些测试会计算一些总金额/费用/运输成本;如果由于某些代码更改而出现问题,您将能够自动检测问题,而您的应用程序不会在生产中中断。

当然,它需要更多的工作(编写测试、配置构建平台和维护测试数据);但这将是一个很好的安全...


另一种可能的解决方案是仅用 Javascript 编写计算代码,并在客户端(显然这不是困难的部分)和服务器端运行它。

在 PHP 中,您可以使用Spidermonkey PECL 扩展执行 JS 代码 (请注意,它仍处于测试阶段;并且您需要能够安装 PHP 扩展,这可能只有您是服务器的管理员才有可能——并且不确定稳定性)

这是一篇关于它的文章:在 PHP 中使用 JavaScript 和 PECL 和 SpiderMonkey

使用此解决方案,您可以将 JS 用于仅在客户端上运行的代码;PHP 用于仅在服务器上运行的代码......而 JS 用于在两侧运行的代码。

于 2009-10-13T04:53:13.410 回答