2013-11-01 54 views
0

我試圖自動打印分數,如果問題是正確的,它應該增加分數。我想這樣的功能:無法增加PHP中的靜態值v

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

這個函數返回如果問題是正確的或如果問題是錯誤的。但是,$分數在任何情況下都不會增加。我怎樣才能增加$分數變量?

+0

您需要傳遞變量作爲函數的參數。 –

+0

srry即時通訊非常新的PHP ....可以üPLZ解釋我更清楚如果你不介意 – fabs11

+0

變量只存在請求時存在。每個新請求都將創建新變量。執行後所有變量都將被終止。只有根據請求才能增加靜態變量。 –

回答

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將無法​​按預期工作。每次調用腳本時,靜態變量都將初始化爲零。

如果你想記住在多個調用腳本$得分的價值,你必須把它保存在$ _SESSION像這樣

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

yup thnx很多其工作良好的bu有一個問題仍然存在問題,直到問題它的工作正常,但在question3之後它的打印分數1和問題4之後顯示3 ....直到問題3其正常工作... – fabs11

1

您需要的變量傳遞爲function.Try像這樣

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

//Function call example; 
checkscore (1); 
0

的說法你也可以試試這個,通過refrence

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

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

通過這種方式,您將返回兩個值從一個函數會說正確或錯誤,參考變量也會更新分數。

2

不要初始化$得分變量,就像這樣:

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 
... 
0

靜態變量被初始化一次甚至重新初始化不會影響變量的值,一個靜態變量只存在於本地函數作用域中,但在程序執行離開該作用域時不會丟失其值。

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

您的代碼檢查沒有問題您可能在調用部分或處理返回值時做錯了。