Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:21079 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 44721 invoked by uid 1010); 7 Dec 2005 16:12:18 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 44705 invoked from network); 7 Dec 2005 16:12:18 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 7 Dec 2005 16:12:18 -0000 X-Host-Fingerprint: 194.109.193.120 unknown Linux 2.4/2.6 Received: from ([194.109.193.120:40919] helo=mx1.moulin.nl) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id 63/CD-14828-2E907934 for ; Wed, 07 Dec 2005 11:12:18 -0500 Received: from localhost (localhost [127.0.0.1]) by mx1.moulin.nl (Postfix) with ESMTP id 49531176972; Wed, 7 Dec 2005 17:12:19 +0100 (CET) Received: from mx1.moulin.nl ([127.0.0.1]) by localhost (moulin [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 32647-20; Wed, 7 Dec 2005 17:12:17 +0100 (CET) Received: from [192.168.1.16] (bspr.xs4all.nl [194.109.161.228]) by mx1.moulin.nl (Postfix) with ESMTP id B82431051C0; Wed, 7 Dec 2005 17:12:17 +0100 (CET) Message-ID: <439709DB.9090503@iamjochem.com> Date: Wed, 07 Dec 2005 17:12:11 +0100 User-Agent: Mozilla Thunderbird 1.0.2 (Windows/20050317) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Alan Pinstein Cc: internals@lists.php.net References: In-Reply-To: X-Enigmail-Version: 0.89.5.0 X-Enigmail-Supports: pgp-inline, pgp-mime Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: amavisd-new at moulin.nl Subject: Re: [PHP-DEV] $this->this and avoiding circular references From: jochem@iamjochem.com (Jochem Maas) are you using ph4 or php5? are you setting $this->this yourself or 'is it just there'? Alan Pinstein wrote: > 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 assuming php4, I would say this these lines should be (difficult to tell though, without more insight/code/brains to play with ;-): function addChildObject(&$c) { $this->children[] =& $c; $c->setParent( $this ); } >> 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 >