Hi all-

I've been trying to avoid circular references in some data import scripts and finally figured out how to do it. However, I wanted to ask you guys to make sure that what I'm doing is something that's legit and can be relied on into the future.

Also, please note that I tried searching the archives for "this" and "this->this" but the searcher keeps removing "this" from my query! So sorry if this is asked and answered....

So, my objects are in a parent-child relationship and they both have links to each other... pretty standard circular reference scenario:


ParentObject:

function addChildObject($c)
{
    $this->children[] = $c;
$c->setParent($this->this); // this syntax is the only way I found to make "$this" not get refcounted here
}

Now, to make this work as it should without incrementing the ref counts when storing the link to the parent, setParent() needs to have a non-refcounted pointer to the object:

ChildObject:

// need & in both places to make the ref not get ref-counted
function setParent(&$parent)
{
   $this->-parent = &$parent;
}

My question is, is "$this->this" valid syntax? Can it be relied on? Is my overall approach sane?

It's very important that I get memory management working in such a way here because the objects are used in large loops for importing data, and without this, the script uses unbounded amounts of memory. With this, it uses a finite amount of memory and works beautifully.

Thanks in advance,
Alan

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to