Home  >  Article  >  Backend Development  >  PHP garbage collection mechanism example introduction

PHP garbage collection mechanism example introduction

尚
forward
2020-03-23 09:16:233247browse

PHP garbage collection mechanism example introduction

<?php
$a = "new string";
?>

In the above example, the new variable a is generated in the current scope. And a variable container of type string and value new string is generated. In the extra two bytes of information, "is_ref" is set to FALSE by default because no custom reference is generated.

"refcount" is set to 1 because there is only one variable using this variable container. Note that when the value of "refcount" is 1, the value of "is_ref" is always FALSE. If you have installed With » Xdebug, you can display the values ​​of "refcount" and "is_ref" by calling the function xdebug_debug_zval().

Example #2 Display zval information

<?php
xdebug_debug_zval(&#39;a&#39;);
?>

The above routine will output:

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

Assigning one variable to another variable will increase the number of references (refcount).

Example #3 Increase the reference count of a zval

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

The above routine will output:

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

At this time, the number of references is 2, because the same variable container is used by variables a and Variable b association. PHP will not copy the generated variable container when it is not necessary.

The variable container is destroyed when "refcount" becomes 0. When any variable associated with a variable container leaves its scope (for example: the function execution ends), or the function unset is called on the variable (), "refcount" will be reduced by 1. The following example can illustrate:

Example #4 Reduce the reference count

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

The above routine will output:

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

If we execute unset($a); now, the variable container containing the type and value will be deleted from memory.

Related recommendations:

PHP video tutorial: https://www.php.cn/course/list/29/type/2.html

The above is the detailed content of PHP garbage collection mechanism example introduction. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:oschina.net. If there is any infringement, please contact admin@php.cn delete