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

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

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

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

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

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

Ответы [ 5 ]

4 голосов
/ 13 октября 2009

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

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

3 голосов
/ 13 октября 2009

Я бы сказал, сделайте это на стороне сервера и для пользователя 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 для дополнительных опций

1 голос
/ 13 октября 2009

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

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

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


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

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

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

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

1 голос
/ 13 октября 2009

Может быть. Взгляните на php.js . Он дает вам все функции PHP, но в JavaScript.

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

1 голос
/ 13 октября 2009

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

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

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

...