<?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垃圾回收機制範例介紹的詳細內容,更多請關注TW511.COM其它相關文章!