理解下PHP靜態變量中使用unset


function test() {
static $test;
$test++;
echo($test . " ");
unset($test);
$test = 2;
echo($test . " ");
}
test();
test();
test();

結果:

1 2 2 2 3 2

我是這樣理解的,首先 static $test 在 test() 函數中定義了一個內存塊,變量 $test 則是對該內存塊的一個引用,然后 $test++ 后,是對該靜態內存塊的疊加,后面 unset($test) 之后,僅僅是變量 $test 對之前那塊靜態內存區域的引用失效了(之前的靜態內存塊依然存在,但 $test 變量本身已經被毀),再后面,$test = 2,則是新申請了一塊內存 以及 一個新的變量 $test。

關於摧毀引用的那幾行代碼,有點類似於下面代碼:

$a = 1;
$b = & $a;
unset($a);

結果 $a 被銷毀,但輸出 $b 結果仍為 1。

再對比上面的靜態變量,道理都一致,由於PHP是引用計數,只要有對該內存塊的引用,該內存塊就不會被銷毀(此亦是容易引起循環引用問題的主要原因)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM