php引用变量

php引用变量的概念和定义方式

概念:在php中引用意味着不同的名字访问同一个变量内容。

定义方式:使用&符号

工作原理:

<?php
header("content-type:text/html;charset=utf-8");
//定义一个变量a
$a = range(0,100);
var_dump(memory_get_usage());//查看内存使用情况
echo "</br>";
//定义变量b,将a变量的值赋值给b,遵循写时改变(copy on write)的原则
$b = $a;
var_dump(memory_get_usage());
echo "</br>";
//对a进行修改
$a = range(0,100);
var_dump(memory_get_usage());
?>

三次输出的内存使用情况分别为:int(144640) 、int(144688) 、int(153368),可知,由于遵循写时改变的原则,a指向了新的空间,故第三次打印内存占用时数值明显增大。

<?php
header("content-type:text/html;charset=utf-8");
//定义一个变量a
$a = range(0,100);
var_dump(memory_get_usage());//查看内存使用情况
echo "</br>";
//定义变量b,将a变量的值赋值给b,遵循写时改变(copy on write)的原则
$b = &$a; //改为引用复制,此时a和b永远指向同一个空间,而不会复制
var_dump(memory_get_usage());
echo "</br>";
//对a进行修改
$a = range(0,100);
var_dump(memory_get_usage());
?>

此时,打印出来的结果分别为:int(144640) 、int(144688) 、int(144680),区别不大,由此可知,a和b还是指向同一空间,当对a进行修改时,就是对a和b共同指向的空间内容的修改。

需要指出的是,unset()函数只会取消引用,而不会销毁空间

<?php
header("content-type:text/html;charset=utf-8");
$a = 1;
$b = &$a;
unset($b);
echo $a."\n"; //结果输出1
?>

对象也遵循引用思想,而不是写时复制,例如:

<?php
header("content-type:text/html;charset=utf-8");
class Person{
    public $name = "xiaolin";
}
$p1 = new Person();
$p2 = $p1;
$p2->name = "xiaolinzi";
?>

在这个例子中,p1和p2同时指向同一个空间,若$p2->name改变,则是该空间的内容进行修改。

 

转载于:https://www.cnblogs.com/xlzfdddd/p/9889979.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值