2013-05-13 108 views
2

如果我運行下面的PHP代碼,我得到123.我不明白它背後的邏輯。我認爲,當我每一次它想輸出1.調用函數所以輸出應該像111PHP中的靜態變量

function keep_track() { 
    STATIC $count = 0; 
    $count++; 
    print $count; 
} 

keep_track(); 
keep_track(); 
keep_track(); 

// output 123 

我知道,一個靜態變量,甚至在函數退出後,但在上面存放值函數我在第一行中分配一個值,但它仍然將+1加上前一個值$count

你能解釋一下嗎? (我很抱歉,如果我聽起來像一個愚蠢的..但我試圖找出如何確切發生這種情況)

+3

您只分配**初始**值。 – 2013-05-13 20:11:52

+2

[PHP靜態變量手冊](http://www.php.net/manual/en/language.variables.scope.php#language.variables.scope.static)解釋了這個問題 – 2013-05-13 20:12:24

+0

因爲'$ count'函數內部遞增 – samayo 2013-05-13 20:12:26

回答

4

$count僅在函數的第一次調用時被初始化,並且每次調用該方法時,都會增加$count

在此link中,向下滾動到Using static variables以便更好地理解。

+0

是因爲'count'前面有'Static'嗎? – 2013-05-13 20:16:18

+1

是的。 'STATIC'是一個關鍵字,用於將變量標記爲靜態,並且這種行爲是由於該關鍵字引起的。 – karthikr 2013-05-13 20:17:10

+0

感謝您的回答:)所以這個函數只是忽略了我的'STATIC $ count = 0;'當我第二次調用它並直接進入'$ count ++;'這一切都是由於'static'我對嗎 ? – 2013-05-13 20:22:25

3

代碼static $count = 0;編譯時執行一次,這就是爲什麼每次調用你的函數的值不會被覆蓋。請參閱註釋「靜態聲明在編譯時解析」。 at http://www.php.net/manual/en/language.variables.scope.php

+0

This'd仍然輸出'123'。提問者預計'111'並要求解釋。 – binarious 2013-05-13 20:16:00

+0

@Omar我其實不是在尋找一個代碼來獲得111 :)我試圖找出爲什麼/我的代碼是如何生成的123 :)感謝您的回答 – 2013-05-13 20:18:15

+0

已更新我的回答以包含對它的解釋 – 2013-05-13 20:21:58