首頁  >  文章  >  後端開發  >  php垃圾回收機制實例介紹

php垃圾回收機制實例介紹

尚
轉載
2020-03-23 09:16:233370瀏覽

php垃圾回收機制實例介紹

<?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(&#39;a&#39;);
?>

以上例程會輸出:

a: (refcount=1, is_ref=0)=&#39;new string&#39;

把一個變數賦值給另一個變數會增加引用次數(refcount).

Example #3 增加一個zval的引用計數

<?php
$a = "new string";
$b = $a;
xdebug_debug_zval( &#39;a&#39; );
?>

以上例程會輸出:

a: (refcount=2, is_ref=0)=&#39;new string&#39;

這時,引用次數是2,因為同一個變數容器被變數 a 和變數 b關聯.當沒必要時,php不會去複製已產生的變數容器。

變數容器在」refcount「變成0時就被銷毀. 當任何關聯到某個變數容器的變數離開它的作用域(例如:函數執行結束),或是對變數呼叫了函數 unset ()時,」refcount「就會減少1,下面的例子就能說明:

Example #4 減少引用計數

<?php
$a = "new string";
$c = $b = $a;
xdebug_debug_zval( &#39;a&#39; );
unset( $b, $c );
xdebug_debug_zval( &#39;a&#39; );
?>

以上例程會輸出:

a: (refcount=3, is_ref=0)='new string'
a: (refcount=1, is_ref=0)=&#39;new string&#39;

如果我們現在執行 unset($a);,包含類型和值的這個變數容器就會從記憶體中刪除。

相關推薦:

PHP影片教學:https://www.php.cn/course/list/29/type/2.html

以上是php垃圾回收機制實例介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:oschina.net。如有侵權,請聯絡admin@php.cn刪除