RE: [PHP-DEV] $ref =& $this;

From: Date: Mon, 03 Oct 2005 14:32:27 +0000
Subject: RE: [PHP-DEV] $ref =& $this;
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-19350@lists.php.net to get a copy of this message
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: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 -- 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/

« previous php.internals (#19350) next »