php继承时的内存分配,php变量内存分配问题实例解析

这篇博客探讨了PHP中变量内存分配的差异,特别是在数组和对象引用上下文中。当$a=$b时,数组会被引用,而对象则不会。在数组情况下,$b['child']=$a会导致$b和$a分开,但对象中$a和$b以及$a->child仍然指向同一内存区域,导致修改一个会影响其他。这种设计使得对象引用行为更需谨慎处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本节内容:

PHP变量内存分配问题

一个关于php变量内存分配的问题,例如代码:

复制代码 代码示例:

$a = array (

'str' => 1,

'child' => 2

);

$b = $a;

$b['child'] = $a;

$b['child']['str'] = 2;

echo $b['str'];

$b = null;

echo $a['str'];

输出结果:

11,$b=$a时其实并没有新分配内存,ab是指向的同一个区域,$b['child']=$a时,$b会先copy一份原来$a的内容,然后再修改。

此时$b和$a指向了不同的区域,再修改$a或者$b的时候都不会互相影响了。

再看这段代码:

复制代码 代码示例:

class A

{  // www.jbxue.com

public $str = '';

public $child;

}

$a = new A();

$b = $a;

$a->str = 1;

$a->child = 2;

$b->child = $a;

$b->child->str = 2;

echo $b->str;

$b = null;

echo $a->str;

输出结果:22,根据实际情况来判断,$b->child=$a时,并没有像数组那样,重新copy一份,ab以及a->child都是指向的同一片区域,这样改任何一个,其余几个都会被改掉。

不理解,PHP为什么设计成如此呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值