ID:               36971
 Updated by:       [EMAIL PROTECTED]
 Reported By:      k at phpkoala dot com
-Status:           Open
+Status:           Bogus
 Bug Type:         Class/Object related
 Operating System: Linux
 PHP Version:      5.1.2
 New Comment:

I can't believe you're serious.


Previous Comments:
------------------------------------------------------------------------

[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

Reply via email to