gc_enable
требуется только в том случае, если вы звоните gc_disable
.На самом деле нет разумной причины делать это, поскольку это может привести к тому, что циклические ссылки не будут собираться мусором (например, до 5.3, когда циклический GC не существовал).
Сборщик мусора в PHP работает путем подсчета ссылок.Вы можете думать о переменной как о «указателе» на объект.Когда объект не имеет указателей на него, он «мертв», потому что ничто не может достичь его, поэтому он является сборщиком мусора.
//one thing points to the Foo object
$a = new Foo();
//now two things do
$b = $a;
//now only $b points to it
$a = null;
//now nothing points to Foo, so php garbage collects the object
$b = null;
Примите во внимание следующее:
$a = new Foo();
$b = new Bar();
$b->foo = $a;
$a->bar = $b;
$a = $b = null;
При этомТочка ничто не держится за $ a или $ b, кроме самих объектов.Это циклическая ссылка, и в предыдущих версиях php (<5.3) сбор не проводился.Циклический коллектор в 5.3 теперь может обнаружить это и очистить эти объекты. </p>