Re: $ref =& $this;

From: Date: Mon, 03 Oct 2005 14:13:44 +0000
Subject: Re: $ref =& $this;
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-19344@lists.php.net to get a copy of this message
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 | MÅ >> ÆàOä¬ïÙð� /6http://ez.no | http://xdebug.org >> >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: http://www.php.net/unsub.php >> >> Best regards, Marcus

« previous php.internals (#19344) next »