Si utilizo una estructura en árbol de nodos similar al siguiente código, ¿tengo que preocuparme por la referencia circular?
He leído que PHP utiliza un mecanismo de asignación de memoria que puede hacer la vida muy difícil para el recolector de basura cuando hay referencias circulares involucradas.¿Cuál es la escala del problema de referencia circular de PHP y debería preocuparme por ello?
Lo que quiero saber es:
- Si mi árbol consta de sólo unos pocos nodos, digamos 25, es esto un problema?
- ¿Se liberará la memoria al final de la secuencia de comandos o crearé lentamente un problema para el servidor?
- ¿En qué circunstancias tendrá este problema un efecto durante la ejecución del script?
- ¿La destrucción manual de las referencias resolverá el problema y debería hacerlo siempre?
class Node {
private $parent;
private $children;
function addChild(Node $child) {
$this->children[] = $child;
$child->setParent($this);
}
function setParent($parent) {
$this->parent = $parent;
}
}
//eg
$node0 = new Node;
$node1 = new Node;
// nodes 1 and 2 have a circular reference to each other
$node0->addChild($node1);
Creo que esto debería estar bien. AFAIK, así es como funciona la implementación PHP DOM. –