Assigning to it will break "this" in the symbol table, or EG(This)?
If it's the latter then it is a problem (and it's the reason I didn't
support it to begin with).
Andi
At 07:05 AM 10/3/2005, Dmitry Stogov 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:[EMAIL PROTECTED]
> 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
>
>
--
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/
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php