php函数在内存中存放,PHP对象在内存中的存在形式,函数传递内存方式

对象在内存中的存在形式,函数传递内存方式

class Persion

{

public $name;

public $age;

}

$a = new Persion();

$a->name = "小白";

$a->age = "8";

//此处传的是$a的地址

$b = $a;

//都输出小白

echo $a->name."
";

echo $b->name."
";

$a = 78;

//$b对应的是$a的地址,改变了$b也就是改变了$a

$b = &$a;

$b = $b + 8;

//$a和$b均等于86

echo $a.'|'.$b."
";

$p = new Persion();

$p->nmae = "小刚";

$p->age = 23;

//如果给一个函数传递一个值,实际上是传递的地址,数据的改变则地址所对应的值也改变

function test($p)

{

$p->name = "小明";

}

//函数的调用,开辟了一个新的栈,函数调用完成则栈关闭

test($p);

//输出小明

echo $p->name;

?>

在以上代码中:

(1)$a对应内存地址,假设是0x123,($a和地址存放在栈区,相当于我们查字典时的索引);

(2)通过内存地址的索引,找到堆区。堆区里面存放着”小白“,”8“等数据

(3)$b = $a,实际上是将$a的内存地址0x123传给$b,堆区里的属性$name,$age不变,也就是不会再重新复制一份。当改变$b->name时,$a->name的值会改变。

内存图:

0818b9ca8b590ca3270a3433284dd417.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值