ID: 12775 Updated by: jeroen Reported By: [EMAIL PROTECTED] Status: Suspended Bug Type: Scripting Engine problem Operating System: All PHP Version: 4.0.6 New Comment: I always use a 'cool' workaround (forgot to mention it), it isn't extremely fast, it is simple... works on both objects, arrays, and mixes. It also preserves internal references ($obj->a =& $obj->b) The workaround? // $a = $b should have worked like this: function deep_copy(&$a,&$b) { $a = unserialize(serialize($b)); } Previous Comments: ------------------------------------------------------------------------ [2001-08-16 16:44:45] [EMAIL PROTECTED] Actually, that would be a nice feature. If one could call a function on an object such as "make_reference($this)" to change the assignment semantics for an object it would be a great way to maintain backward compatibility but let new objects be assign-by-reference. Anyway, the following function will do a deep copy of the object to get around this bug (if you didn't use the words "shallow copy" I wouldn't have thought of it): function copy_object($object) { $copy = $object; $properties = get_object_vars($object); foreach($properties as $name => $value) { if (is_object($value)) $copy->$name = copy_object($value); else $copy->$name = $value; } return $copy; } ------------------------------------------------------------------------ [2001-08-15 18:11:10] [EMAIL PROTECTED] Shallow copying of objects and arrays bit you... Will be fixed in PHP 5 Suspended (it could be called a 'feature' though...) ------------------------------------------------------------------------ [2001-08-15 18:00:05] [EMAIL PROTECTED] If you set a property of an object to a global variable, it is no longer possible to make a copy of that object! Every "copy" becomes a reference. Example: --/ snip /-- class foo { function foo() { $this->test = 'Test'; $GLOBALS['test'] =& $this->test; } } $obj1 = new foo(); $copyOfObj1 = $obj1; // Should be a copy, but is reference $obj1->test = "changed!"; echo $copyOfObj1->test.'<br>'; --/ snip /-- The result of this code is: "changed!" but it should be "Test". $copyOfObj1 should be a copy of $obj1, but instead it acts like a reference. If you unset $GLOBALS['test'] then it copies as it should. This is a bug occurs in all versions of PHP4 on all platforms (from what I can tell). ------------------------------------------------------------------------ Edit this bug report at http://bugs.php.net/?id=12775&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]