<?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('a'); ?>
The above routine will output:
a: (refcount=1, is_ref=0)='new string'
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( 'a' ); ?>
The above routine will output:
a: (refcount=2, is_ref=0)='new string'
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( 'a' ); unset( $b, $c ); xdebug_debug_zval( 'a' ); ?>
The above routine will output:
a: (refcount=3, is_ref=0)='new string' a: (refcount=1, is_ref=0)='new string'
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!