ID: 27659 Comment by: jbeall at heraldic dot us 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:
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. Previous Comments: ------------------------------------------------------------------------ [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. ------------------------------------------------------------------------ [2004-03-23 13:09:12] js at enradia dot com Description: ------------ When trying to reassign $this (from session data for example) I get an error: Fatal error: Cannot re-assign $this in... Code used: $this = unserialize($data); This works in php 4. Perhaps this is a feature change but I could not find a reference to any alternatives so I am submitting a bug just in case. Thanks! Joshua Reproduce code: --------------- $this = unserialize($data); Expected result: ---------------- Assignment of session or serialized data to $this object Actual result: -------------- Fatal error: Cannot re-assign $this in... ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=27659&edit=1