#20240 [NEW]: order of destructor calls

From: Date: Mon, 04 Nov 2002 09:47:39 +0000
Subject: #20240 [NEW]: order of destructor calls
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-24023@lists.php.net to get a copy of this message
From: vincent.planchenault@atempo.com Operating system: Linux PHP version: 4CVS-2002-11-04 PHP Bug Type: Zend Engine 2 problem Bug description: order of destructor calls Using this small PHP code : <?php class Referenced { private $m_references=0; function __construct() { } function ref() { $this->m_references++; } function unref() { $this->m_references--; } function __destruct() { echo 'in Referenced Destructor...<br>'; echo "references = ".$this->m_references."<br>"; echo 'out of Referenced Destructor<br>'; } } class Referencer { private $m_ref; function __construct($t) { $this->m_ref = $t; $t->ref(); } function __destruct() { echo "in Referencer Destructor...<br>"; $this->m_ref->unref(); echo "out of Referencer Destructor<br>"; } } $t = new Referenced(); echo 'instanciating first Referencer object...<br>'; $a = new Referencer($t); echo 'instanciating second Referencer object...<br>'; $b = new Referencer($t); echo 'deleting first Referencer object...<br>'; unset($a); echo '<b>terminating</b><br>'; ?> I expected PHP to call unref() on Referenced object for the second Referencer instance in the Referencer destructor, and then let Referenced object be freed. This simulated output correspond to this expectation : instanciating first Referencer object... instanciating second Referencer object... deleting first Referencer object... in Referencer Destructor... out of Referencer Destructor terminating in Referencer Destructor out of Referencer Destructor in Referenced Destructor... references = 0 out of Referenced Destructor... PHP gave me this output : instanciating first Referencer object... instanciating second Referencer object... deleting first Referencer object... in Referencer Destructor... out of Referencer Destructor terminating in Referenced Destructor... references = 1 out of Referenced Destructor in Referencer Destructor... Fatal error: Trying to access invalid object in <blablabla>/test.php on line 42 It seems that object instances are freed BEFORE the call of the object destructor; I think object variables have to be freed after the destructor call... -- Edit bug report at http://bugs.php.net/?id=20240&edit=1 -- Try a CVS snapshot: http://bugs.php.net/fix.php?id=20240&r=trysnapshot Fixed in CVS: http://bugs.php.net/fix.php?id=20240&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=20240&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=20240&r=needtrace Try newer version: http://bugs.php.net/fix.php?id=20240&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=20240&r=support Expected behavior: http://bugs.php.net/fix.php?id=20240&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=20240&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=20240&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=20240&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=20240&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=20240&r=dst IIS Stability: http://bugs.php.net/fix.php?id=20240&r=isapi

« previous php.bugs (#24023) next »