2008-10-13 38 views
0

example是從php.net:PHP中的靜態變量未正常工作

<?php 
function Test() 
{ 
    static $a = 0; 
    echo $a; 
    $a++; 
} 
?> 

這是我的代碼:

function getNextQuestionID() 
{ 
    static $idx = 0; 
    return $idx++; 
} 

我用它在JavaScript:

'quizID=' + "<?php echo getNextQuestionID(); ?>" 

每次都返回0。爲什麼?

回答

5

我相信你誤解了什麼是靜態變量。試試這個代碼,你可能會更好理解:

echo getNextQuestionID() . ", " getNextQuestionID() . ", " getNextQuestionID(); 

你會明白我的意思。

只要腳本執行,靜態變量只能存在。

它在第一次運行而不是1時返回0的原因是因爲您正在使用後綴運算符$ var ++而不是前綴版本 - ++ $ var。區別在於增量只在函數返回後使用postfix運算符時纔會應用 - 但如果使用前綴運算符,則會在函數返回之前應用它。

+0

對不起,我的意思是每次返回0。我知道後期和前期增量之間的區別。 – syaz 2008-10-13 09:45:39

0

如果希望數據在多個頁面上保留,則需要使用sessions

+0

即使在上例中使用$ _SESSION也會得到相同的結果,即變量在腳本執行結束時被重置。對於會話變量有點怪異。 – syaz 2008-10-13 12:27:05

1
session_start(); 
function getNextQuestionID() 
{ 
    if (!isset($_SESSION['qNo'])) { 
     $_SESSION['qNo'] = 0; 
    } else { 
     $_SESSION['qNo']++; 
    } 

    return $_SESSION['qNo']; 
} 
0
function getNextQuestionID() 
{ 
    if (!isset($idx)) { 
     static $idx = 0; // OR -1, if you want to start with 0 (ZERO); 
    } 
    $idx++; 
    return $idx; 
} 

echo getNextQuestionID().'<br />'; 
echo getNextQuestionID().'<br />'; 
echo getNextQuestionID().'<br />'; 
echo getNextQuestionID().'<br />'; 

回報1,2,3,4

「靜態」的意思,該變量的值作爲你的腳本運行(一個網站的來電!保持它在只要保持幾個網站電話,你需要SESSIONS)。如果該函數被多次調用,該值將保持不變,並且不會始終重新初始化,因此可以遞增。