博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[基础篇]PHP引用变量
阅读量:6227 次
发布时间:2019-06-21

本文共 1270 字,大约阅读时间需要 4 分钟。

概述

该文章主要从内存空间上简述PHP中引用变量的基本概念、工作方式,以及一个常见的demo实例。

概念

  • 什么是引用变量,在PHP当中,用什么符号定义引用变量?

    • 不同的名字访问同一个变量内容,使用&表示。
  • COW(copy on write)

    • 内存优化的常见手段,在php中也采用了这种方式来优化内存。
    • 写时复制,即只有当对其中一个或多个变量进行写操作的时候,才会复制一份内存,对其内容进行修改。

      在PHP中使用
      memory_get_usage()观察内存变化

演示

未使用&(引用变量)

$a = range(0,1000);        var_dump(memory_get_usage());        $b = $a;`        var_dump(memory_get_usage());        $a = range(0,1000);        var_dump(memory_get_usage());

运行结果:

clipboard.png

内存在第一次和第二次并没有太大的差异,第三次产生较大差异

使用 &

$a = range(0,1000);        var_dump(memory_get_usage());        $b = &$a;        var_dump(memory_get_usage());        $a = range(0,1000);        var_dump(memory_get_usage());

运行结果:

clipboard.png

在使用引用传值内存解析分析:

clipboard.png

$a被赋值时在内存中占据A内存空间,
$b=&$a
$b指向同一内存空间,当
$a发生改变时
$b所占据的内存空间会跟随
$a变化

unset

unset() 只会取消引用不会销毁空间
$a=1;$b=&$a;unset($b);echo $a;

输出结果:1

内存空间分析:

clipboard.png

$a被赋值
$b=&$a之后
$a与$b直行同一内存空间,当
unset($b)时取消了
$b
$a的引用,使
$b不在指向
$a的内存空间

题外话

对象本身就是引用传递
class Person{    public $name="zhangsan";}$p1 =new Person;xdebug_debug_zval('p1');$p2 =$p1;xdebug_debug_zval('p1');$p2->name="lisi";xdebug_debug_zval('p1');

运行结果:

clipboard.png

结果分析:

clipboard.png

对象被实例后经引用传递之后
$p1
$p2指向的始终是同一内存空间

案例

$val) { $val = &$data[$key]; } var_dump($data);

写出如上程序的输出结果?

程序运行时,每一次循环结束后变量$data的值是什么?
程序执行完成后,变量$data的值是什么?

内存变化及解析:

clipboard.png

感谢

感谢你看到这里,希望本篇可以帮到你。有问题可在评论区留言,谢谢

转载地址:http://gvnna.baihongyu.com/

你可能感兴趣的文章
nodejs基础 -- NPM 使用介绍
查看>>
Loadrunner中关联的作用:
查看>>
动态创建Fragment
查看>>
王立平--Failed to push selection: Read-only file system
查看>>
numpy转换
查看>>
《FreeSWITCH: VoIP实战》:SIP 模块 - mod_sofia
查看>>
Codeforces Good Bye 2015 D. New Year and Ancient Prophecy 后缀数组 树状数组 dp
查看>>
ZOJ 3635 Cinema in Akiba(线段树)
查看>>
[Android]使用Dagger 2依赖注入 - DI介绍(翻译)
查看>>
(转)BT1120接口及协议
查看>>
Robot Framework与Web界面自动化测试学习笔记:定位到新窗口
查看>>
u3d demo起步第二章
查看>>
The Dataflow Model 论文
查看>>
Linux守护进程
查看>>
Redis的字典(dict)rehash过程源代码解析
查看>>
遇到没“人性”的管理:你真可怜!
查看>>
局域网之php项目IP访问共享
查看>>
http://www.bootcss.com/p/font-awesome/
查看>>
新浪微博UWP UI意见征求
查看>>
使用ServiceStack构建Web服务
查看>>