From:             [EMAIL PROTECTED]
Operating system: Linux
PHP version:      4.1.0
PHP Bug Type:     Scripting Engine problem
Bug description:  destructor emulation problem (references?)

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 bug report at: http://bugs.php.net/?id=14744&edit=1


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to