比如说像这样:
class foo {}
$foo = new foo();
echo 123;
...
# 后面一直没有使用$foo这个对象,那么它是会被垃圾回收机制自动回收呢还是一直在内存中?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
php的gc基于引用计数,所以$foo不会被回收, 会一直留在内存中, 直到请求结束。
即便是只new , 不赋值给$foo, new foo()也不一定会被gc, php的gc触发是有条件的。
参考
我只是推理:
应该分两步说,new Class应该并不会引发内存操作,但是赋值则实际造成了内存分配。所以$a = new Class和$a = 5;实际上没有任何区别,除非明确的删除,否则会持续到进程结束被自动回收。
理解不深,大致说下。
对象生成后没使用,会是个引用数为 1 的结构体。
离开作用域后结构体引用数为 0,等待下次自动 GC 的时候会回收内存。