Bug #75692 [NEW]: Changing properties of cloned object can alter the original

From: Date: Fri, 15 Dec 2017 15:38:41 +0000
Subject: Bug #75692 [NEW]: Changing properties of cloned object can alter the original
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-213118@lists.php.net to get a copy of this message
From: sdaicz at dc dot uba dot ar Operating system: All PHP version: 7.0.26 Package: Scripting Engine problem Bug Type: Bug Bug description:Changing properties of cloned object can alter the original Description: ------------ - Clone an object - Iterate by reference through the attribute values of either the original or the clone - Change attribute values inside the loop - Both objects get their attribute values changed instead of only the one intended Tested on Windows and Linux. This seems to happen only in php 7.0. php 7.1 and 5.6 both work as expected. Test script: --------------- $a = new \stdClass(); $a->b = 1; $a->c = 2; $d = clone $a; foreach ($d as $key=>&$value) { $value += 10; } unset($value); var_dump($a); var_dump($d); Expected result: ---------------- Object $a should keep its original values ("b"=>1, "c"=>2). This is what happens in 7.1 and 5.6: class stdClass#1 (2) { public $b => int(1) public $c => int(2) } class stdClass#2 (2) { public $b => int(11) public $c => int(12) } Actual result: -------------- Object $a is altered by the loop, resulting in the same values as $d object(stdClass)#1 (2) { ["b"]=> int(11) ["c"]=> int(12) } object(stdClass)#2 (2) { ["b"]=> int(11) ["c"]=> int(12) } -- Edit bug report at https://bugs.php.net/bug.php?id=75692&edit=1 -- Try a snapshot (PHP 5.4): https://bugs.php.net/fix.php?id=75692&r=trysnapshot54 Try a snapshot (PHP 5.5): https://bugs.php.net/fix.php?id=75692&r=trysnapshot55 Try a snapshot (trunk): https://bugs.php.net/fix.php?id=75692&r=trysnapshottrunk Fixed in SVN: https://bugs.php.net/fix.php?id=75692&r=fixed Fixed in release: https://bugs.php.net/fix.php?id=75692&r=alreadyfixed Need backtrace: https://bugs.php.net/fix.php?id=75692&r=needtrace Need Reproduce Script: https://bugs.php.net/fix.php?id=75692&r=needscript Try newer version: https://bugs.php.net/fix.php?id=75692&r=oldversion Not developer issue: https://bugs.php.net/fix.php?id=75692&r=support Expected behavior: https://bugs.php.net/fix.php?id=75692&r=notwrong Not enough info: https://bugs.php.net/fix.php?id=75692&r=notenoughinfo Submitted twice: https://bugs.php.net/fix.php?id=75692&r=submittedtwice register_globals: https://bugs.php.net/fix.php?id=75692&r=globals PHP 4 support discontinued: https://bugs.php.net/fix.php?id=75692&r=php4 Daylight Savings: https://bugs.php.net/fix.php?id=75692&r=dst IIS Stability: https://bugs.php.net/fix.php?id=75692&r=isapi Install GNU Sed: https://bugs.php.net/fix.php?id=75692&r=gnused Floating point limitations: https://bugs.php.net/fix.php?id=75692&r=float No Zend Extensions: https://bugs.php.net/fix.php?id=75692&r=nozend MySQL Configuration Error: https://bugs.php.net/fix.php?id=75692&r=mysqlcfg

« previous php.bugs (#213118) next »