0

スコアを自動的に印刷しようとしています。問題が正しければ、スコアを増やす必要があります。私はこの機能を試しました:

function checkscore ()
{
    static $score = 0;
    if ($_SESSION['result']  == "Correct")
       $score++;
    return $score;
}  

この関数は、問題が正しい場合は1を返し、問題が間違っている場合は0を返します。ただし、 $score はいずれの場合も増加しません。$score 変数をインクリメントするにはどうすればよいですか?

4

5 に答える 5

2

次のように $score 変数を初期化しないでください。

function checkscore ()
{
    static $score; // Here without initialization
    if (is_null($score)) {
        $score = 0;
    }

    if ($_SESSION['result']  == "Correct") {
        $score++;
    }

    return $score;
}

$_SESSION['result'] = 'Correct';
checkscore();  // 1
checkscore();  // 2
...
于 2013-11-01T10:35:46.450 に答える
1

関数の引数として変数を渡す必要があります。このように試してください

function checkscore ($score){
  if ($_SESSION['result']  == "Correct")
     $score ++;
return $score;
}

//Function call example;
checkscore (1);
于 2013-11-01T10:11:47.817 に答える
0

これも試すことができます。

function checkscore (&$score){
  if ($_SESSION['result']  == "Correct"){
     $score ++;
      return 'correct';
  }else{
     return 'wrong';
  }

//Function call example;
$score = 1;
checkscore ($score);
echo $score;

このようにして、関数から 2 つの値を返し、一方が正しいか間違っているかを判断し、参照変数がスコアも更新します。

于 2013-11-01T10:18:45.427 に答える
0

静的変数は、再初期化が変数の値に影響を与えない場合でも、一度だけ初期化されます。静的変数は、ローカル関数スコープにのみ存在しますが、プログラムの実行がこのスコープを離れても、その値は失われません。

function checkscore ()
{
   static $score = 0;
   if ($_SESSION['result']  == "Correct")
      $score++;
   return $score;
}

呼び出しセクションまたは戻り値の処理で間違っている可能性があるかどうか、コードチェックに問題はありません。

于 2013-11-01T11:18:03.807 に答える