Newsgroups: php.internals,php.internals,php.internals,php.internals,php.internals,php.internals,php.internals,php.internals,php.internals Path: news.php.net Xref: news.php.net php.internals:21119 php.internals:21121 php.internals:21123 php.internals:21127 php.internals:21129 php.internals:21131 php.internals:21140 php.internals:21144 php.internals:21151 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 58073 invoked by uid 1010); 9 Dec 2005 05:11:38 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 58058 invoked from network); 9 Dec 2005 05:11:38 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 9 Dec 2005 05:11:38 -0000 X-Host-Fingerprint: 80.74.107.235 mail.zend.com Linux 2.5 (sometimes 2.4) (4) Received: from ([80.74.107.235:61613] helo=mail.zend.com) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id 2E/AD-14828-5E119934 for ; Fri, 09 Dec 2005 00:11:02 -0500 Received: (qmail 27178 invoked from network); 9 Dec 2005 05:10:58 -0000 Received: from localhost (HELO ANDI-NOTEBOOK.zend.com) (127.0.0.1) by localhost with SMTP; 9 Dec 2005 05:10:58 -0000 Message-ID: <7.0.0.16.2.20051208210843.059ef560@zend.com> X-Mailer: QUALCOMM Windows Eudora Version 7.0.0.16 Date: Thu, 08 Dec 2005 21:10:56 -0800 To: Alan Pinstein ,internals@lists.php.net In-Reply-To: <63053C31-56D1-49A3-8D24-4FC41188A92A@mac.com> References: <43970D54.1040206@zend.com> <63053C31-56D1-49A3-8D24-4FC41188A92A@mac.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; format=flowed Subject: Re: [PHP-DEV] $this->this and avoiding circular references From: andi@zend.com (Andi Gutmans) Hi Alan, Generally speaking, if you create a circular reference (whether by reference or by value), then you will have a "memory leak" until the end of the request. This is not only true for objects (and circular references might be indirect) but also for arrays. This is a side-effect of reference counting systems, but within the way PHP is used within a request/response paradigm, it shouldn't be a real limiting factor in real-life usage. On the contrary, for these kind of apps, garbage collecting systems have potential to be significantly slower. Andi At 08:15 PM 12/7/2005, Alan Pinstein wrote: >My question is closely related to the one discussed on this php-dev >thread: > >http://thread.gmane.org/gmane.comp.php.devel/32430 > >Someone just sent me this link, which I didn't find myself when >searching b/c the searches strip "this" from queries. > >Anyway, the question is related to reference counting of objects when >assigned by value and by reference. It is a very important OO topic >as the ability to have a non-ref-counted object "handle" is basically >requisite to prevent circular reference deadlocks in OO projects. > >If the way I have proposed doesn't work, then what is the official >way? And there *must* be one, otherwise, there is no way to avoid >huge memory leaks (deferred release until end-of-script, I know, but >it's a memory leak in the context of the script while it's running) >with this kind of OO arrangement. > >In particular what confuses me is, why does, at least on PHP 5.0.4, >this: > >$obj = &$this->this; // doesn't seem to increment the refcount of the >object > >behaves differently from: > >$obj = &$this; // does seem to increment the refcount to the object > >References to $this should not only be valid, but are pretty much >required for proper memory management in an OO environment, unless >there is some other sanctioned way to get a weak reference... now I >am not sure if the fact that making a & reference to an object >doesn't increment the refcount is intended behavior, or an unintended >side effect that may change. This is one of my major questions. > >Also, in regards to the thread linked above, I'd say that making & >$this an error is not desirable behavior; but maybe changing the >value of $this should be (ie in C terms, $this is not an lvalue). >Although, in C++/Obj-C you *can* even change this/self... in fact >it's common in Obj-C: > >- (id) init >{ > if (self = [super init]) { /* etc */ } > return self; >} > >Of course PHP is not Obj-C, but it's OO and garbage collected in a >similar way, so PHP has the same need for manipulating $this; that >is, creating weak references. > >Alan > > >On Dec 7, 2005, at 11:27 AM, Antony Dovgal wrote: > >>On 07.12.2005 18:40, Alan Pinstein wrote: >>>Hi all- >> >> >>Please use php-general@lists.php.net for questions regarding >>development *in* PHP. >>-- >>Wbr, Antony Dovgal > >-- >PHP Internals - PHP Runtime Development Mailing List >To unsubscribe, visit: http://www.php.net/unsub.php