php 指的是,php – 变量指的是自身

答案很简单,正如您对问题的评论所解释的。虽然,我觉得我明白你的混乱来自哪里,所以让我们来解决这个问题。 :D

首先,您为变量分配一个值,内部PHP将其存储在内存段中,并增加引用此地址的变量的计数器。 (Ref count = 1)。所有的直接向前直到这一点。

然后,您重新使用变量将引用(C语言中的指针)存储到此内存地址。 PHP手册解释为存储对变量的引用,使非C程序员更容易,这是(我认为)你的困惑来自哪里。没有这样的东西,作为内部变量的引用,只是变量所连接的数据。由于您重新使用变量存储此引用,引用计数不会增加:仍然只有一个变量指向该内存段。但是,它不再是普通的PHP变量,而是一个引用(指针)的数据。

编辑,添加:

另一种完成相同结果的方式是使用两个变量,然后取消设置第一个变量。代码示例:

$a = 100; // refcount += 1

xdebug_debug_zval ('a'); // refcount=1,is_ref=0 -> zval {value=100,type=int (addr=0x78765asd)}

$b =& $a; // refcount += 1

xdebug_debug_zval ('a') // refcount=2,is_ref=0 -> zval {value=100,type=int (addr=0x78765asd)}

xdebug_debug_zval ('b') // refcount=2,is_ref=1 -> zval {value=100,type=int (addr=0x78765asd)}

unset ($a); // refcount -= 1

xdebug_debug_zval ('b') // refcount=1,is_ref=1 -> zval {value=100,type=int (addr=0x78765asd)}

仅使用一个变量将两个操作合并为一个,而不会破坏数据。因此:1变量(refcount = 1),它是数据本身的引用(is_ref = 1)。

正如我们试图向你解释的那样,这个混乱源于事实,即原始问题背后的前提是有缺陷的:你不是在这些例子中引用一个变量,而是引用一个内存区域,其中包含最初关联的数据与所述变量。所以你要覆盖一个(原来的)“hardlink”,另一个。唯一的区别是后者被标记为因为内部PHP的原因。 (在引用计数> 1的情况下,引用不会被复制)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值