php class 设置属性

php class set properties

我无法理解这段代码:

$obj = new stdClass();
$obj->s = new stdClass();
$obj->s->p = new stdClass();
$obj->s->p->v = 1;
$obj->p = $obj->s->p;

echo $obj->s->p->v; //Return 1, OK
echo $obj->p->v; //Return 1, OK

$obj->p->v = 2; //Set the new value

echo $obj->p->v; //Return 2, OK
echo $obj->s->p->v; //Return 2, why??? I didn't set it!

我在没有使用 stdClass(真实 class)的情况下测试了这段代码,结果是一样的。

请给我解释一下!

看到这一行

$obj->p = $obj->s->p;

这意味着您将 $obj->s->p 地址复制到 $obj->p,因此它们都指向内存中的相同地址。所以当你用 $obj->p 做某事时,它的变化也反映在 $obj->s->p.