ID: 31402 User updated by: otto at efficiency-online dot nl Reported By: otto at efficiency-online dot nl -Status: Feedback +Status: Open Bug Type: Scripting Engine problem Operating System: OpenBSD 3.6 PHP Version: 4.3.10 New Comment:
I'm getting the same, wrong, results with php4-STABLE-200501171730. -Otto Previous Comments: ------------------------------------------------------------------------ [2005-01-17 18:37:01] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php4-STABLE-latest.tar.gz For Windows: http://snaps.php.net/win32/php4-win32-STABLE-latest.zip ------------------------------------------------------------------------ [2005-01-04 09:22:55] otto at efficiency-online dot nl Description: ------------ An object having a field initialized to a element of an array in the same object is transformed into a reference after unserializing. I had a session object exposing this problem and managed to create a code snippet exposing the problem. After the assignment to the field $y->B, the array should not have changed, but it is changed. It looks like $y->B has become a reference to $y->A[1] after the unserialize call. This is a regression wrt to 4.3.9 and might be related to bug Bug #31213. Reproduce code: --------------- <?php class X { var $i; function X($i) { $this->i = $i; } } class Y { var $A = array(); var $B; function x() { $this->A[1] = new X(1); $this->A[2] = new X(2); $this->B = $this->A[1]; } } $x = new Y(); $x->x(); echo "original object:\n"; print_r($x); $ser = serialize($x); $y = unserialize($ser); echo "after unserialize:\n"; print_r($y); $y->B = $y->A[2]; echo "after assignment:\n"; print_r($y); ?> Expected result: ---------------- // result with 4.3.9 original object: y Object ( [A] => Array ( [1] => x Object ( [i] => 1 ) [2] => x Object ( [i] => 2 ) ) [B] => x Object ( [i] => 1 ) ) after unserialize: y Object ( [A] => Array ( [1] => x Object ( [i] => 1 ) [2] => x Object ( [i] => 2 ) ) [B] => x Object ( [i] => 1 ) ) after assignment: y Object ( [A] => Array ( [1] => x Object ( [i] => 1 ) [2] => x Object ( [i] => 2 ) ) [B] => x Object ( [i] => 2 ) ) Actual result: -------------- // result with 4.3.10 y Object ( [A] => Array ( [1] => x Object ( [i] => 1 ) [2] => x Object ( [i] => 2 ) ) [B] => x Object ( [i] => 1 ) ) after unserialize: y Object ( [A] => Array ( [1] => x Object ( [i] => 1 ) [2] => x Object ( [i] => 2 ) ) [B] => x Object ( [i] => 1 ) ) after assignment: y Object ( [A] => Array ( [1] => x Object ( [i] => 2 ) [2] => x Object ( [i] => 2 ) ) [B] => x Object ( [i] => 2 ) ) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=31402&edit=1