<?php $a = "new string"; ?>
在上例中,新的變數a,是在目前作用域中產生的。並且產生了類型為 string 和值為new string的變數容器。在額外的兩個位元組資訊中,"is_ref"被預設為 FALSE,因為沒有任何自訂的引用產生。
"refcount" 設定為 1,因為這裡只有一個變數使用這個變數容器。注意到當"refcount"的值是1時,"is_ref"的值總是FALSE. 如果你已經安裝了» Xdebug,你能透過呼叫函數 xdebug_debug_zval()來顯示"refcount"和"is_ref"的值。
Example #2 顯示zval訊息
<?php xdebug_debug_zval('a'); ?>
以上例程會輸出:
a: (refcount=1, is_ref=0)='new string'
把一個變數賦值給另一個變數會增加引用次數(refcount).
Example #3 增加一個zval的引用計數
<?php $a = "new string"; $b = $a; xdebug_debug_zval( 'a' ); ?>
以上例程會輸出:
a: (refcount=2, is_ref=0)='new string'
這時,引用次數是2,因為同一個變數容器被變數 a 和變數 b關聯.當沒必要時,php不會去複製已產生的變數容器。
變數容器在」refcount「變成0時就被銷毀. 當任何關聯到某個變數容器的變數離開它的作用域(例如:函數執行結束),或是對變數呼叫了函數 unset ()時,」refcount「就會減少1,下面的例子就能說明:
Example #4 減少引用計數
<?php $a = "new string"; $c = $b = $a; xdebug_debug_zval( 'a' ); unset( $b, $c ); xdebug_debug_zval( 'a' ); ?>
以上例程會輸出:
a: (refcount=3, is_ref=0)='new string' a: (refcount=1, is_ref=0)='new string'
如果我們現在執行 unset($a);,包含類型和值的這個變數容器就會從記憶體中刪除。
相關推薦:
以上是php垃圾回收機制實例介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!