我正在尝试自动打印分数,如果问题正确,它应该增加分数。我试过这个功能:
function checkscore ()
{
static $score = 0;
if ($_SESSION['result'] == "Correct")
$score++;
return $score;
}
如果问题正确,此函数返回1 ,如果问题错误,则返回0。但是 $score 在任何情况下都不会增加。如何增加 $score 变量?
不要初始化 $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
...
您需要将变量作为函数的参数传递。像这样尝试
function checkscore ($score){
if ($_SESSION['result'] == "Correct")
$score ++;
return $score;
}
//Function call example;
checkscore (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;
}
静态变量仅初始化一次,即使重新初始化也不会影响变量的值,静态变量仅存在于局部函数范围内,但当程序执行离开此范围时,它不会丢失其值。
function checkscore ()
{
static $score = 0;
if ($_SESSION['result'] == "Correct")
$score++;
return $score;
}
您的代码没有问题,请检查您是否在调用部分或处理返回值时做错了。
你也可以试试这个,通过参考
function checkscore (&$score){
if ($_SESSION['result'] == "Correct"){
$score ++;
return 'correct';
}else{
return 'wrong';
}
//Function call example;
$score = 1;
checkscore ($score);
echo $score;
通过这种方式,您将从一个函数返回两个值,一个会说正确或错误,并且参考变量也会更新分数。