php 类 调用变量,什么是php引用变量?PHP中引用是如何实现

这篇文章给大家介绍的内容是关于 什么是php引用变量?PHP中引用是如何实现,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

概念:

引用:在PHP中,不同的变量名字访问同一个变量的内容,成为引用,用&符号表示。

引用工作原理:

(1)PHP在内存中存储的原理:<?php

$a = range(1, 100); $b = $a;

?>

因为PHP中存在COW(Copy On Write)机制,所以

a; 以上代码在内存中可表示为下图:

6af3969c362a007d875d726774894746.png

只有当对

a的存储,此时会重新开辟一个空间;这就是PHP的COW机制。即:<?php

$a = range(1, 100);

$b = $a;

$a = range(1, 100);

?>

这样虽然没有改变

a。可以用PHP函数 memory_get_usage() 查看内存使用情况用以证明。

(2)PHP中引用的实现原理<?php

$a = range(1, 100);

$b = &$a;

?>

此时因为有引用(&),则在内存中

a最开始分配的内存,并且是不会改变的,此时

27eda1943dc9b24e62c50057659b8691.png

然后如果此时改变$a的值:<?php

$a = range(1, 100);

memory_get_usage();

$b = &$a;

memory_get_usage();

$a = range(1,1000);

memory_get_usage();?>

45191991f58ae20fddf34d492ab77204.png

可以看到内存中不会重新开辟一块空间,因为引用是将这块地址永远的分配给了

b,所以改变

a和$b的值都会改变。也可用memory_get_usage()函数进行查看。

(3)PHP中的zval结构体(变量容器)

我们知道PHP中的变量都是存储在zval结构体中的,引用也可以通过查看zval结构体中的存储情况去查看。<?php

$a = range(1, 100);

xdebug_debug_zval('a');

$b = &$a;

?>

在使用xdebug_debug_zval();函数需要安装PHP的xdebug扩展。

相关文章推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值