Edit report at https://bugs.php.net/bug.php?id=36696&edit=1
ID: 36696 Updated by: yohg...@php.net Reported by: iain at iaindooley dot com Summary: __destruct() is called before serialize() when object stored in session Status: Assigned Type: Feature/Change Request -Package: Session related +Package: Scripting Engine problem Operating System: * -PHP Version: 5.1.2 +PHP Version: * Assigned To: sas Block user comment: N Private report: N New Comment: There is exact dup bug report, but I cannot find. Workaround is call before session_write_close() before shutdown, but __destruct should be the last magicmethod to be called, isn't it? Previous Comments: ------------------------------------------------------------------------ [2008-06-26 09:38:09] margus dot sipria at gmail dot com duplicate with a bug http://bugs.php.net/bug.php?id=33772 ------------------------------------------------------------------------ [2006-03-23 00:27:58] iain at iaindooley dot com in a garbage collection system, the destructor shouldn't be called on an object until the last reference to it is destroyed. if i do: $_SESSION['var'] = new Var(); then a reference to that object that was created should be stored in the $_SESSION array, and __destruct() should not be called until the $_SESSION array is destoryed. so clearly the session array must be being destroyed before the objects within it are serialized, which isn't right. ------------------------------------------------------------------------ [2006-03-22 18:13:41] il...@php.net There is nothing wrong with the order here. Temp var gets destroyed as soon as it is created, while session serialization happens at the end of the script. ------------------------------------------------------------------------ [2006-03-21 23:34:59] iain at iaindooley dot com i would say that the fact the order of operations changes for a temp var or an assigned var is a bug. ------------------------------------------------------------------------ [2006-03-21 15:47:16] il...@php.net Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php When putting objects into session or serializing them manually put the instantiation result into a variable 1st and then use it. Ex. $a = new Object(); $_SESSION['obj'] = $a; Doing so avoids temp var, which gets destroyed right away hence leading to the wrong order of operations. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at https://bugs.php.net/bug.php?id=36696 -- Edit this bug report at https://bugs.php.net/bug.php?id=36696&edit=1