Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:19349 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 92520 invoked by uid 1010); 3 Oct 2005 14:31:46 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 92503 invoked from network); 3 Oct 2005 14:31:46 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 3 Oct 2005 14:31:46 -0000 X-Host-Fingerprint: 80.74.107.235 mail.zend.com Linux 2.5 (sometimes 2.4) (4) Received: from ([80.74.107.235:60515] helo=mail.zend.com) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id 06/2D-54476-0D041434 for ; Mon, 03 Oct 2005 10:31:45 -0400 Received: (qmail 20972 invoked from network); 3 Oct 2005 14:31:40 -0000 Received: from localhost (HELO ANDI-NOTEBOOK.zend.com) (127.0.0.1) by localhost with SMTP; 3 Oct 2005 14:31:40 -0000 Message-ID: <6.2.3.4.2.20051003073049.03519170@localhost> X-Mailer: QUALCOMM Windows Eudora Version 6.2.3.4 Date: Mon, 03 Oct 2005 07:31:37 -0700 To: Marcus Boerger ,Dmitry Stogov Cc: 'Derick Rethans' , 'PHP Developers Mailing List' In-Reply-To: <774652170.20051003161344@marcus-boerger.de> References: <002a01c5c823$97c04d20$e902a8c0@thinkpad> <774652170.20051003161344@marcus-boerger.de> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; format=flowed Subject: Re: [PHP-DEV] $ref =& $this; From: andi@zend.com (Andi Gutmans) See my note regarding the fixes we did in the past 1-2 weeks regarding references. It's a huge BC break, and quite frankly, it's not the kind of thing that forces you not to write good code because it's supported. Andi At 07:13 AM 10/3/2005, Marcus Boerger wrote: >Hello Dmitry, > > that IS NOT proper code and it wasn't in php 4 either, it was only a >workaround that is no longer needed. Had the php 4 design been correct in >the first place that wouldn't have been allowed in 4 either. Since BC is not >working out anyway i see absolutley no reason to encourage people to >continue to missuse php. > >marcus > >Monday, October 3, 2005, 4:05:56 PM, you wrote: > > > Hi, > > > At first $ref =& $this; produced fatal error because of the bug (not by > > design). > > For example $ref->prop =& $this; worked and works without errors. > > > So my patch shouldn't be reverted in any case. > > > At second disallowing such assignments and passign $this by reference will > > breake a lot of PHP4 code (Mamaba CMS). > > In PHP4 passing $object by refernce and by value had completely different > > semantic. > > > I don't see any reason to disallow 100% proper code (like the the > > following). > > > class Child { > > function Child($parent) { > > $parent->children[] =& $this; > > } > > } > > > Of course using "=& $this" user can breake $this value, but other languages > > (C++) allows this too. > > I don't think we should be paranoiacs. > > > Thanks. Dmitry. > > > >> -----Original Message----- > >> From: Derick Rethans [mailto:derick@php.net] > >> Sent: Monday, October 03, 2005 5:09 PM > >> To: PHP Developers Mailing List > >> Subject: [PHP-DEV] $ref =& $this; > >> > >> > >> Hello, > >> > >> Dmitry committed a fix earlier to ignore the & in the > >> statement above. I > >> think this is not a good thing to do as it's simply > >> conceptually wrong. > >> The first thing is that ignoring syntax without issuing a warning is > >> dubious because people might think it does actually work, and > >> secondly > >> because I think that the code above is wrong anyway - somewhat in the > >> same way that "$this = new foo();" is wrong. > >> > >> There is never any need to assign $this by reference, nor to > >> pass it by > >> reference to a function as it's an object anyway, making the > >> references > >> pointless - I would even go as far as disallowing passing $this by > >> references to a function - where the reference has to be > >> ignored again, > >> otherwise it allows you to chantge $this to a different object with: > >> > >> class Foo { > >> function byRef(&$f) { > >> $f = new Bar(); > >> } > >> > >> function modifyThis() { > >> $this->byRef($this); > >> } > >> } > >> > >> I think we should prevent people from writing syntax like > >> this, as it is > >> not obvious what is going to happen. This means that we should revert > >> Dmitry's patch. > >> > >> regards, > >> Derick > >> > >> -- > >> Derick Rethans > >> http://derickrethans.nl | http://ez.no | http://xdebug.org > >> > >> -- > >> PHP Internals - PHP Runtime Development Mailing List > >> To unsubscribe, visit: http://www.php.net/unsub.php > >> > >> > > > > >Best regards, > Marcus > >-- >PHP Internals - PHP Runtime Development Mailing List >To unsubscribe, visit: http://www.php.net/unsub.php Zend/PHP Conference & Expo Power Your Business with PHP October 18-21, 2005 - San Francisco http://zend.kbconferences.com/