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

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>对象在内存中的存在形式,函数传递内存方式</title>
</head>
<body>
<?php 
class Persion
{
	public $name;
	public $age;
}
$a = new Persion();
$a->name = "小白";
$a->age = "8";
//此处传的是$a的地址
$b = $a;
//都输出小白
echo $a->name."<br>";
echo $b->name."<br>"; 


$a = 78;
//$b对应的是$a的地址,改变了$b也就是改变了$a
$b = &$a; 
$b = $b + 8;
//$a和$b均等于86
echo $a.'|'.$b."<br>";


$p = new Persion();
$p->nmae = "小刚";
$p->age = 23;
//如果给一个函数传递一个值,实际上是传递的地址,数据的改变则地址所对应的值也改变
function test($p)
{
	$p->name = "小明";
}
//函数的调用,开辟了一个新的栈,函数调用完成则栈关闭
test($p);
//输出小明
echo $p->name;
?>
</body>
</html>

在以上代码中:

(1)$a对应内存地址,假设是0x123,($a和地址存放在栈区,相当于我们查字典时的索引);
(2)通过内存地址的索引,找到堆区。堆区里面存放着”小白“,”8“等数据
(3)$b = $a,实际上是将$a的内存地址0x123传给$b,堆区里的属性$name,$age不变,也就是不会再重新复制一份。当改变$b->name时,$a->name的值会改变。

内存图:

PHP对象在内存中的存在形式,函数传递内存方式_第1张图片


你可能感兴趣的:(PHP对象在内存中的存在形式,函数传递内存方式)