4

私はPHPでショッピングカートを書いています。その機能の一部は、特定の製品セットの送料を計算することです。Javascriptを有効にしているユーザーの場合、カート内の変更でページの再読み込みやAJAX呼び出しが不要になるように、クライアント側で正確な配送計算を行うことで、可能な限りスムーズなエクスペリエンスを提供したいと思います。

現在、PHPには送料を計算する関数があり、Javascriptにはその機能を反映した別の関数があります。数式が頻繁に変更される可能性があり、2つの異なる言語で2つの別々の関数を書き直さなければならない(そしてそれらの出力が一致することを確認する)と、保守性の問題が発生する可能性があるのではないかと心配しています。

私が探しているのは、PHPとJavascriptの両方で解釈できるように、言語に依存しない方法で配送料を計算するための式を表す方法です。現在、出荷式は単一の変数(アイテム数)の関数にすぎませんが、あまり書き直さずにさらに追加できるようにしたいと思います。

PHPとJavascriptの両方で解釈できる方法で、かなり単純な数式を表現するための受け入れられた方法はありますか?できれば私自身の通訳を書かずに?

編集:関数全体は必要ありません。「4+1.5n」の線に沿った非常に単純な数式だけです。一般的なスプレッドシートのセルにあるようなものです。

4

5 に答える 5

4

一般に、コードの2つのバージョンを維持するだけが最善です。もちろん、最も洗練された解決策は、JavaScript自体でサーバーロジックを作成することです(cappuccino.orgを参照)。すでに大量のPHPコードを記述しているように思われるため、これは適切な選択ではありません。

ただし、このかゆみを掻く必要があると本当に感じた場合は、サーバーへのAJAXコールバックを検討してください。少し遅くなりますが、ほとんどのユーザーは気付かないでしょう。

于 2009-10-13T04:47:18.083 に答える
3

サーバー側とユーザーAJAXでそれを行うと言いますが、ユーザーにとっては大きな違いはありませんが、注文を送信した後のユーザーが異なる計算を見る場合、2つのバージョンを維持することで違いが生じる可能性があります。

とにかく、何らかの理由で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は、変数名で有効なドル記号をサポートしています。2つの言語の間には十分な共通の構文があり、単純な数学のみを扱っている限り、それぞれで同じように解析して機能するコードを簡単に記述できます。配列は少しトリッキーかもしれません。PHP.JSをチェックしてください。これは、JavascriptでPHP組み込み関数を模倣するためのライブラリのセットです。

(編集:他の誰かが私の編集中に同じものを投稿しようとしていることを知らずに、php.jsへのリンクを編集しました。彼へのクレジット/ホラー。;))

于 2009-10-13T04:47:05.263 に答える
1

多分。php.jsを見てください。それはあなたにすべてのphp関数を与えますが、JavaScriptで。

検証全体をphpで記述し、Ajaxを使用してクライアント側でクエリを実行することもできます。

于 2009-10-13T04:47:11.393 に答える
1

これは、アプリケーションにいくつかの自動化されたテストを追加し、少なくともアプリケーションを運用サーバーにデプロイするたびにテストを実行し、それらのいくつかが失敗した場合は、デプロイをキャンセルするときだと言う人もいます。

PHP と JS コードの両方のテストがあり、それらのテストのいくつかは、合計金額 / 料金 / 送料を計算します。また、コードの変更が原因で問題が発生した場合でも、アプリケーションが本番環境で中断されることなく、問題を自動的に検出できます。

もちろん、もう少し作業が必要です(テストの作成、ビルド プラットフォームの構成、およびテスト データの維持の両方)。しかし、それは大きなセキュリティになります...


別の可能な解決策は、計算コードを Javascript のみで記述し、クライアント側(これは明らかに難しい部分ではありません)とサーバー側の両方で実行することです。

PHP から、 Spidermonkey PECL 拡張機能 を使用して JS コードを実行できます(まだベータ版であることに注意してください。また、PHP 拡張機能をインストールできる必要があります。これは、おそらくサーバーの管理者である場合にのみ可能です --安定性については不明)

これについての記事があります: Using JavaScript in PHP with PECL and SpiderMonkey .

このソリューションでは、クライアントでのみ実行されるコードに JS を使用できます。サーバー上でのみ実行されるコード用の PHP と、両側で実行されるコード用の JS です。

于 2009-10-13T04:53:13.410 に答える