对象在哪里,当我将一个新对象分配给一个现有的php对象


Where is the object, when I assign a new object to a existing php obj?

例如:

1 $abc = new MyObj();
2 $abc = new MyAnotherObj();

我在第一行赋值MyObj,第二行赋值另一个对象。第一行被赋值的对象去了哪里?它还在记忆里吗,还是在别的地方?

一旦第二行执行,第一个对象将调用其析构函数并将被释放。PHP的GC做引用计数;当您覆盖对MyObj实例的唯一引用时,引用的数量降为零,并且GC销毁该对象。

注意,无论你给$abc赋了什么值,都会发生这种情况——你可以给"foobar"42null甚至new MyObj()赋值(MyObj的一个实例),旧对象将被销毁。

在任何其他语言中都将被垃圾收集,因为不再有任何对它的引用(此时您将无法进一步引用它)。这是我不会在PHP(或者,实际上,任何其他语言)中做的事情之一……如果需要引用第一个对象,请先保存它,或者不要使用相同的变量名。