我经过测试,结果是错误的,但这没有意义:
class myClass
{
public $x;
function myMethod()
{
echo $this->x;
}
}
$a = new myClass();
$a->x = 10;
$b = $a;
$b->x = 20;
$c = clone $b;
$c->x = 30;
$a->myMethod();
$b->myMethod();
$c->myMethod();
我的直觉是102030,但结果实际上是202030!!! 10号怎么了?!?! $a 的变量不应该被保留吗?我认为所有对象都是独立的,除非它具有由与号(=&)设置的直接引用,否则不会更新?
最佳答案
在$b = $a;
中,仅复制对象引用,而不复制对象。
但是,当您使用 clone
时,对象确实被复制,因此 $c = clone $b,
创建了一个新对象(由 引用) $c
)和一个新的引用($c
)。
在$b =& $a;
中,符号$a
和$b
都指向同一个引用,即甚至连引用也不会被复制(因此,对 $b
的赋值,比如说,一个整数,也会影响 $a
的值)。
总而言之,这里有两个间接:从符号到 "zval" (在对象引用的情况下)以及从对象引用到对象本身(即存储实际对象状态的内存部分)。
关于php - 对象分配在 PHP OOP 中没有意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7548990/