Avoid Recursive References in PHP
If you're ever wondering why some class instances are not being garbage collected, make sure you're not initiating a child class with a reference to the parent. If you are, make sure to destroy the reference to the child class when you no longer need it.
class A {
function __construct () {
$this->b = new B($this);
}
function __cleanup() {
$this->b = null;
}
}
class B {
function __construct ($parent = NULL) {
$this->parent = $parent;
}
}
// this will create a massive memory bloat
for ($i = 0 ; $i < 1000000 ; $i++) {
$a = new A();
}
// this will keep the memory clean
for ($i = 0 ; $i < 1000000 ; $i++) {
$a = new A();
$a->__cleanup();
}
https://bugs.php.net/bug.php?id=33595 (don't be fooled by the closed status, this bug is still alive and kicking in 5.5.14)
Written by David Boskovic
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Php
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#