RE: [PHP-DEV] $ref =& $this;
| From: | Dmitry Stogov | Date: | Mon, 03 Oct 2005 14:22:39 +0000 |
| Subject: | RE: [PHP-DEV] $ref =& $this; | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-19346@lists.php.net to get a copy of this message | ||
Marcus,
BC is working. PHP5 has zend.ze1_compatibility_mode and some PHP
applications use it.
BTW to disallow =& $this and passing $this by reference we should change not
only compiler but also executor.
On each parameter passing we should check if we do passing $this by
reference (it is not possile to eleminaty all such checks at compile time).
Dmitry.
> -----Original Message-----
> From: Marcus Boerger [mailto:helly@php.net]
> Sent: Monday, October 03, 2005 6:14 PM
> To: Dmitry Stogov
> Cc: 'Derick Rethans'; 'PHP Developers Mailing List'
> Subject: Re: [PHP-DEV] $ref =& $this;
>
>
> 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
>
>