0

同じコードでphp、javascript、ajaxで構成されるコードを書くのは悪い習慣ですか? 例えば:

<?php
 $randNum = rand(1,10)
  if ($randNum <= 5) {
    echo "Enemy got the jump on you! <script> enemyTurn() </script>";
  }else {
    echo "You got the jump! <script> playerTurn() </script>";
  }
?>

enemyTurn()は、playerTurn()jQuery と AJAX を含む JavaScript 関数です。

4

3 に答える 3

1

浴槽で食器を洗うのは悪い習慣です。それでもできますが、必要なときにシャワーを浴びるのは面倒です。

懸念事項は可能な限り分離したままにする必要があります。例は次のとおりです。

PHP

<?php if ($randNum <= 5): ?>

<div data-function="enemyTurn">Enemy got the jump on you!<div>

<?php else: ?>

<div data-function="playerTurn">You got the jump!<div>

<?php endif; ?>

JS

$(function(){

  var yourFunctions = {

    enemyTurn : function(){ // some stuff },
    playerTurn : function(){ // some stuff }

  };

  $('[data-function]').each(function(){

    yourFunctions[$(this).data('function')].call(this);

  })

});

このようにして、js コードは HTML から分離されます。それにもかかわらず、サーバーをログイン/データ保存の目的だけに使用して、ゲームクライアント側のすべてのロジックを実行できるにおいがします。

于 2013-05-19T15:29:45.783 に答える
1

これは、デザイン哲学の問題に帰着します。そのようなコードを書くとしたら、メッセージを追加するクラスとスクリプト呼び出しが必要になるでしょう。次のようになります。

class BrowserAction {

    public function __construct($message, $javascript) {
        $this->message = $message;
        $this->javascript = $javascript;
    }

    protected $message;
    protected $javascript;

    public function setMessage($message) {
        $this->message = $message;
    }

    public function printMessage() {
        return $this->message();
    }

    public function setJavascript($javascript) {
        $this->javascript = $javascript;
    }

    public function printJavascript() {
        return '<script type="text/javascript">' . 
            $this->javascript() .
            '</script>';
    }

    public function toString() {
        return $this->printMessage() . $this->printJavascript();
    }

    public function echo() {
        echo $this->toString();
    }
}

次のように使用します。

<?php
 $randNum = rand(1,10)
  if ($randNum <= 5) {
    $msg = new BrowserAction("Enemy got the jump on you!", "enemyTurn()");
  }else {
    $msg = new BrowserAction("You got the jump!", "playerTurn()");
  }
  $msg->echo();
?>

これにより、後でアプリケーションを追加または拡張する際の柔軟性が向上します。type="text/javascript"を1 か所に挿入するだけで、アプリケーション内のすべてのスクリプトに簡単に追加できたことがわかりますか?

この特定の例では、許容されます。実際、望ましい効果を達成するために、そうでなければ何をしますか?

于 2013-05-19T15:10:34.083 に答える
0

次のようなものを使用して、Javascript で同じ効果を得ることができます。

if((Math.round(Math.random() * 10 + 1) % 2) === 0)
{
    enemyTurn();
    document.getElementById('status').innerHTML = 'Enemy got the jump on you!';
}
else
{
    playerTurn();
    document.getElementById('status').innerHTML = 'You got the jump!';
}

そうすれば、不要なサーバー呼び出しは必要ありません。

于 2013-05-19T15:17:39.517 に答える