在函數中 unset()一個靜態變量

最近在PHP中文手冊中看到一句話:

   如果在函數中 unset() 一個靜態變量,則 unset() 將銷燬此變量及其所有的引用。

 

然後又在其後看到以下代碼:

 

其輸出:

 1
   2
   3

 看了這個輸出,實在讓人有點迷糊,這個unset在這裏怎麼算是起到釋放變量的作用呢?在這裏,釋放與不釋放,結果都一樣,有什麼作用呢?實在沒有辦法,翻看官方的英文手冊,這裏說得就很明白了。
If a static variable is unset() inside of a function, unset() destroys the variable only in the context of the rest of a function. Following calls will restore the previous value of a variable.(即在函數內釋放靜態變量,僅對函數上下文剩餘部分有效,但當再次在函數內聲明使用時這個靜態變量,將恢復變量的前一個值)

接下來我們再看這一個sample,大家就明白了:

輸出結果:

Before unset: 1, after unset: 23
Before unset: 2, after unset: 23
Before unset: 3, after unset: 23

這一下子就明白了。當$bar被unset後,再針對$bar賦值時,將會創建一個新的變量,這個變量不同於靜態變量$bar。但當foo被第二次調用時,$bar被再次聲明爲靜態變量,這時將恢復前一次unset的靜態變量,所以再次static說明時,$bar的值爲1。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章