ID: 36971 User updated by: k at phpkoala dot com Reported By: k at phpkoala dot com Status: Open Bug Type: Documentation problem Operating System: Linux PHP Version: 5.1.2 New Comment:
Thanks Scott, that makes sense. Does that mean there is no way to accomplish this in PHP5? I guess so. I'd like to see this added to the docs. Previous Comments: ------------------------------------------------------------------------ [2006-04-05 06:21:38] [EMAIL PROTECTED] @Scott: totally true. This can ofcourse be mentioned in the documentation if it's not already there... ------------------------------------------------------------------------ [2006-04-04 23:53:40] scottmacvicar at ntlworld dot com Destroying an object internally is an absurd concept, how can you destroy something that is currently in the scope of execution? The reason it works in PHP 4 and not in PHP 5 is that object types are no longer mutable. ------------------------------------------------------------------------ [2006-04-04 23:18:38] k at phpkoala dot com Mike, I am serious or I would not have taken the time to post this bug report. The manual page for unset, over at http://www.php.net/manual/en/function.unset.php, does not mention this change in functionality. Like I said in my first message, this is something that works in PHP4 but no longer works in PHP5. If you can't believe I am serious, please point out why you think this is a joke? How do you destroy a class instance internally in PHP5? And if this is never going to happen, can't you say this in the manual, along with an explanation? If nothing else, the very fact that it worked in PHP4 and does not work in PHP5 should merit a mention in the documentation. (Just Google for this issue and you will see many pieces of software that have broken because of this, when used on PHP5.) Back to you, Mike. ------------------------------------------------------------------------ [2006-04-04 19:33:07] [EMAIL PROTECTED] I can't believe you're serious. ------------------------------------------------------------------------ [2006-04-04 19:25:26] k at phpkoala dot com Description: ------------ In PHP4, calling unset($this) within a class worked fine, and destroyed that class instance. This was a very useful way technique, one that I and others have used many times. In PHP5, it simply no longer works. There is no error message - not even a strict - the instance is just unaffected. PHP4 also offers another method - setting $this = NULL, but PHP5 gives an error that $this cannot be reassigned. I would like to see this functionality restored, or, an alternate mechanism for destroying class instances internally should be pointed out (and put into the manual), or, if for some unknown reason this useful functionality is now declared by the PHP staff to be evil, the reasons should be revealed and the appropriate details put into the manual so that we know it know longer works in PHP5, and why. I figure it's just a bug ;) Reproduce code: --------------- class test { function f1() { unset($this); } function f2() { $this = NULL; } } $obj = new test; var_dump($obj); $obj->f1(); var_dump($obj); $obj->f2(); var_dump($obj); unset($obj); var_dump($obj); Expected result: ---------------- object(test)(0) { } NULL NULL NULL Note: if f1() worked, there would be no need to run f2(), because $obj would have been unset. But, both methods should result in $obj being NULL. OR: object(test)(0) { } object(test)(0) { } NULL NULL This would also be an acceptable result, because there is an alternate method (f2()) that can be used. This is the result from the latest version of PHP4. Actual result: -------------- >From PHP5: Fatal error: Cannot re-assign $this in /home/test2.php on line 6 So, f2(), which sets $this to NULL, doesn't work. Commenting that out produces: object(test)#1 (0) { } object(test)#1 (0) { } NULL So, neither of the methods f1() or f2() work. >From the latest version of PHP4: object(test)(0) { } object(test)(0) { } NULL NULL This is fine, as the desired effect can still be accomplished. In earlier versions of PHP4, both f1() and f2() work fine. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=36971&edit=1