无法在PHP中增加静态值

时间:2013-11-01 10:08:34

标签: php session

我正在尝试自动打印分数,如果问题是正确的,它应该增加分数。我试过这个功能:

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

如果问题正确,此函数返回 1 ;如果问题错误,则返回 0 。但在任何情况下,$得分都不会增加。如何增加$ score变量?

5 个答案:

答案 0 :(得分: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
...

答案 1 :(得分:1)

你需要将变量作为函数的参数传递。像这样尝试

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

//Function call example;
checkscore (1);

答案 2 :(得分:1)

您的代码没有任何问题,但我想象您希望静态变量在多次调用此脚本时仍然存在。

这不是静态的工作方式!

如果你这样使用它:

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

echo checkscore () . '<br>';
echo checkscore () . '<br>';
echo checkscore () . '<br>';

您将得到结果:

1
2
3

但是,如果您从用户回答一个问题并且表单提交到此脚本的表单中调用脚本static将无法按预期工作。每次调用脚本时,静态变量都会初始化为零。

如果你想记住多次调用脚本的$ score值,你必须将它保存在这样的$ _SESSION中

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

答案 3 :(得分:0)

您也可以尝试这一点,通过引用传递

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

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

通过这种方式,您将从函数返回两个值,一个将表示正确或错误,参考变量也将更新得分。

答案 4 :(得分:0)

静态变量只被初始化一次,即使重新初始化也不会影响变量的值,静态变量只存在于局部函数作用域中,但是当程序执行离开这个作用域时它不会丢失它的值。

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

你的代码检查没有错,你可能在调用部分做错了或处理返回值。