ID:               14744
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Open
+Status:           Closed
 Bug Type:         Scripting Engine problem
 Operating System: Linux
 PHP Version:      4.1.0
 New Comment:

If you want to use destructors, always instantiate the
object with "&new" instead of "new".



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

[2001-12-28 14:54:21] [EMAIL PROTECTED]

The paste seems that wasn't very good, sorry. The correct code:
<?php
$GLOBALS['_call_destruct'] = null;
class foo {
   var $a = "orig value";
   
   function foo() {
       $this->register();
   }
   
   function register() {
       $GLOBALS['_call_destruct'] =& $this;
   }
}

function _destruct() {
   $foo =& $GLOBALS['_call_destruct'];
   echo "in destructor: {$foo->a}\n";
}

register_shutdown_function('_destruct');

$foo = new Foo;
$foo->a = "new value";
echo "updated value: {$foo->a}\n";
?>


------------------------------------------------------------------------

[2001-12-28 13:54:45] [EMAIL PROTECTED]

I catched a bug in the PEAR object destructor emulation and could
isolate the problem in this script.
<?php
$GLOBALS['_call_destruct'] = null;
class foo {
    var $a = "orig value";
    
    function foo() {
        $this->register();
    }
    
    function register() {
        $GLOBALS['_call_destruct'] =& $this;
    }
}updated value: new value
in destructor: orig value

function _destruct() {
    $foo =& $GLOBALS['_call_destruct'];
    echo "in destructor: {$foo->a}\n";
}

register_shutdown_function('_destruct');

$foo = new Foo;
$foo->a = "new value";
echo "updated value: {$foo->a}\n";
?>

This outputs:
updated value: new value
in destructor: orig value

Which means that the value of the "a" property is lost. Really the
whole object is equal to the object comming from the constructor
instead of the modified one. This doesn't ocurr if you register the
object in a method out the constructor.

The correct output of this should be:
updated value: new value
in destructor: new value

-- Tomas V.V.Cox

------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=14744&edit=1

Reply via email to