例如:
1 $abc = new MyObj();
2 $abc = new MyAnotherObj();
我在第一行赋值MyObj
,第二行赋值另一个对象。第一行被赋值的对象去了哪里?它还在记忆里吗,还是在别的地方?
一旦第二行执行,第一个对象将调用其析构函数并将被释放。PHP的GC做引用计数;当您覆盖对MyObj
实例的唯一引用时,引用的数量降为零,并且GC销毁该对象。
注意,无论你给$abc
赋了什么值,都会发生这种情况——你可以给"foobar"
或42
或null
甚至new MyObj()
赋值(MyObj
的一个新实例),旧对象将被销毁。
在任何其他语言中都将被垃圾收集,因为不再有任何对它的引用(此时您将无法进一步引用它)。这是我不会在PHP(或者,实际上,任何其他语言)中做的事情之一……如果需要引用第一个对象,请先保存它,或者不要使用相同的变量名。