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

Reply via email to