例5 Creating a array zval
- <?php
- $a = array( 'meaning' => 'life', 'number' => 42 );
- xdebug_debug_zval( 'a' );
- ?>
以上例程的输出类似于:
- a: (refcount=1, is_ref=0)=array (
- 'meaning' => (refcount=1, is_ref=0)='life',
- 'number' => (refcount=1, is_ref=0)=42
- )
图示:

一个简单数组的zval
这三个zval变量容器是: a,meaning和 number。增长和削减”refcount”的规矩和膳绫擎提到的一样. 下面, 我们在数组中再添加一个元素,并且把它的值设为数组中已存在元素的值:
- a: (refcount=2, is_ref=0)='new string'
例6 添加一个已经存在的元素到数组中
- <?php
- $a = array( 'meaning' => 'life', 'number' => 42 );
- $a['life'] = $a['meaning'];
- xdebug_debug_zval( 'a' );
- ?>
图示:
以上例程的输出类似于:

带有引用的简单数组的zval
大年夜以上的xdebug输出信息,我们看到原有的数组元素和新添加的数组元素接洽关系到同一个"refcount"2的zval变量容器. 尽管 Xdebug的输出显示两个值为'life'的 zval 变量容器,其实是同一个。 函数xdebug_debug_zval()不显示这个信息,然则你能经由过程显示内存指针信息来看到。
删除数组中的一个元素,就是类似于大年夜感化域中删除一个变量. 删除后,数组中的┞封个元素地点的容器的“refcount”值削减,同样,当“refcount”为0时,这个变量容器就大年夜内存中被删除,下面又一个例子可以解释:
- a: (refcount=1, is_ref=0)=array (
- 'meaning' => (refcount=2, is_ref=0)='life',
- 'number' => (refcount=1, is_ref=0)=42,
- 'life' => (refcount=2, is_ref=0)='life'
- )
例7 大年夜数组中删除一个元素
以上例程的输出类似于:
- a: (refcount=2, is_ref=1)=array (
- 0 => (refcount=1, is_ref=0)='one',
- 1 => (refcount=2, is_ref=1)=...
- )
如今,当我们添加一个数组本身作为这个数组的元素时,工作就变得有趣,下个例子将解释这个。例中我们参加了引用操作符,不然php将生成一个复制。
推荐阅读
阿里巴巴发布AliGenie语音开放平台 “智联网”战略又落一子
10月12日消息,在2017杭州•云栖大年夜会上,阿里巴巴人工智能实验室宣布了AliGenie 开放平台,重要包含三大年夜部分:精灵技能市场、硬件开放平台、行业解决筹划,周全赋能智能家居、>>>详细阅读
本文标题:PHP的垃圾回收机制——引用计数
地址:http://www.17bianji.com/lsqh/37855.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示