ID: 27659 Comment by: mlemos at acm dot org Reported By: js at enradia dot com Status: Bogus Bug Type: Unknown/Other Function Operating System: linux 2.6.3 PHP Version: 5.0.0RC1 New Comment:
There is no assignment of $this in Metabase code. It was a misunderstanding of the original poster. Metabase works seeminglessly in PHP 3, PHP 4 and PHP 5. Previous Comments: ------------------------------------------------------------------------ [2004-07-15 02:49:27] jbeall at heraldic dot us Here is a potential solution. Where you would have reassigned $this, do something like this: $this->Object = new Whatever(); Or, in the case of unserializing session data $this->Session = unserialize($data); Now you have a choice. Your first option is to delegate every method that needs to be delegated. So, $this would need methods for every method in $Object. Each method would look something like: function nameOfFunction() { return $this->Object->nameOfFunction(); } The other option is to intercept all method calls, and then decide on the fly if they belong to $this or to $this->Object. If you have properties, I think you are going to have to intercept with __get() and __set(). You can read about overloading object functions with __get(), __set(), and __call() here: http://us2.php.net/manual/en/migration5.oop.php#migration5.oop.overload I chose the delegation model. If possible, I would recommend that. If you have properties to deal with, you will have to intercept the __get() and __set() calls and handle them appropriately. ------------------------------------------------------------------------ [2004-03-23 14:40:09] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php Actually this is expected behavior. We explicitly decided to have $this being readonly because of interna problems with the new engine. ------------------------------------------------------------------------ [2004-03-23 13:57:53] [EMAIL PROTECTED] Take a look at PEAR::DB for an example of using a factory method (i.e.: $foo = DB::connect($uri); ) For background on why support for reassigning $this was dropped, take a look at http://news.php.net ( php.internals mailing list in particular ) or the ZendEngine2 mailing list which is archived at http://www.zend.com ------------------------------------------------------------------------ [2004-03-23 13:52:42] js at enradia dot com There is a _LOT_ of code out there using that. Metabase among others. Is there an alternative? This could be a huge problem if there is none. Thanks ------------------------------------------------------------------------ [2004-03-23 13:38:14] [EMAIL PROTECTED] This "feature" was undocumented in PHP4 and was never intended to work. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/27659 -- Edit this bug report at http://bugs.php.net/?id=27659&edit=1