Как я могу представить формулу так, чтобы ее понимали как Javascript, так и PHP?

Я пишу корзину для покупок на PHP, и часть ее функции заключается в том, чтобы рассчитать стоимость доставки для данного набора продуктов. Для пользователей с включенным Javascript я хочу предоставить максимально плавный опыт, выполнив точный расчет доставки на стороне клиента, чтобы изменения в корзине не требовали перезагрузки страницы или вызовов AJAX.

В настоящее время у меня есть функция в PHP, которая рассчитывает стоимость доставки, и еще одна функция в Javascript, которая отражает его функциональность. Я обеспокоен тем, что формула может часто меняться, и необходимость переписывать две отдельные функции на двух разных языках (и убедиться, что их выходные данные совпадают) может создать проблемы с удобством сопровождения.

То, что я ищу, - это способ представления формулы для расчета стоимости доставки каким-либо независимым от языка способом, чтобы ее можно было интерпретировать как PHP, так и Javascript. В настоящее время формула доставки является функцией только одной переменной (количества элементов), хотя мне бы хотелось добавить больше без переписывания.

Есть ли общепринятый способ представления довольно простой математической формулы таким образом, который может быть интерпретирован как PHP, так и Javascript? Желательно без написания собственного переводчика?

Редактировать: мне не нужна целая функция, просто довольно простая математическая формула по принципу «4 + 1,5n». То, что вы найдете в типичной ячейке электронной таблицы.

13.10.2009 04:43:57
5 ОТВЕТОВ
РЕШЕНИЕ

Как правило, вам лучше всего поддерживать две версии кода. Конечно, наиболее элегантным решением является написание логики сервера на самом JavaScript (см. Cappuccino.org ); это был бы плохой выбор для вас, потому что, похоже, вы уже написали тонну PHP-кода.

Однако, если вы действительно чувствуете необходимость покончить с этим зудом, рассмотрите возможность обратного вызова AJAX на сервер. Хотя немного медленнее, большинство пользователей не заметят.

4
13.10.2009 04:47:18

Это плохая идея, и чем хуже будет вычисление, тем хуже будет идея.

Тем не менее, Javascript поддерживает знак доллара как законный в именах переменных. Существует достаточно общего синтаксиса между двумя языками, чтобы вы могли легко написать код, который анализирует и работает одинаково в каждом из них, если вы имеете дело только с простой математикой. Массивы могут быть немного сложнее. Проверьте PHP.JS , набор библиотек для имитации встроенных функций PHP в Javascript.

(Редактировать: я редактировал по ссылке на php.js, не зная, что кто-то другой собирался опубликовать то же самое во время моего редактирования. Кредит / ужасы ему.;))

1
13.10.2009 04:47:05

Может быть. Посмотрите на php.js . Он дает вам все функции PHP, но в JavaScript.

Вы также можете написать всю проверку в php и использовать Ajax для запросов на стороне клиента.

1
13.10.2009 04:47:11
php.js просто предоставляет библиотеку для пользователей, которые привыкли к большому выбору функций, предоставляемых PHP. Вопрос здесь в том, чтобы иметь формулу, независимую от языка.
Kshitij Saxena -KJ- 13.10.2009 04:50:57
Учитывая сходство синтаксиса, он может создать некоторый код для копирования и вставки, который требует лишь незначительных корректировок. Это упростит логику по крайней мере.
Byron Whitlock 13.10.2009 04:52:07

Кто-то скажет, что настало время добавить некоторые автоматизированные тесты в ваше приложение и запускать их, по крайней мере, каждый раз, когда вы хотите развернуть свое приложение на своем производственном сервере - и, если некоторые из них не пройдут, отменить развертывание.

У вас будут тесты как для PHP, так и для кода JS, и некоторые из этих тестов будут подсчитывать некоторую общую сумму / расходы / стоимость доставки; и если что-то пойдет не так из-за изменения кода, вы сможете обнаружить проблему автоматически, не прерывая работу приложения.

Конечно, это требует немного больше работы (и для написания тестов, и для настройки платформы сборки, и для поддержки тестовых данных) ; но это было бы большой безопасностью ...


Другим возможным решением было бы написать свой код вычисления только в Javascript и запускать его как на стороне клиента (очевидно , это не сложная часть) , так и на стороне сервера.

Из PHP вы можете выполнять код JS, используя расширение Spidermonkey PECL (однако, обратите внимание, что оно все еще находится в бета-версии; и вам нужно будет установить расширения PHP, что, вероятно, будет возможно, только если вы являетесь администратором своего сервера - и не уверен насчет стабильности) .

Вот статья об этом: Использование JavaScript в PHP с PECL и SpiderMonkey .

С этим решением вы можете использовать JS для кода, который выполняется только на клиенте; PHP для кода, который выполняется только на сервере ... И JS для кода, который выполняется с обеих сторон.

1
13.10.2009 04:53:13

Я бы сказал, сделайте это на стороне сервера и для пользователя AJAX. Это не будет иметь большого значения для пользователя, но поддержание двух версий может иметь значение, когда пользователь после отправки заказа увидит другой расчет.

В любом случае, если вы по какой-то причине вообще не хотите AJAX, лучше всего иметь одну библиотеку javascript, которая выполняется как на стороне клиента, так и на стороне сервера. Вы можете выполнить javascript из php на стороне сервера. Например, вы можете использовать следующее из 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 для получения дополнительных опций

3
13.10.2009 04:58:22