ID: 11909 User Update by: [EMAIL PROTECTED] Status: Bogus Bug Type: Scripting Engine problem Operating system: Debian GNU/Linux (woody) PHP Version: 4.0.6 Description: Object Copied By Reference!! I think you misunderstood me. I'm not assuming that the object in $obj2 should be gone after I copy something else to this object. I AM assuming that the object in $obj is that same object as was in $obj2 and that the object in $obj2 is now a different object. The issue is that the = operator does not create a complete copy of the object referenced by $obj. It instead creates an object containing an object that is referenced by both $obj and $obj2. Maybe this will make it easier to see: If you change "$obj2 = $obj;" to "$obj3 = $obj;" and "echo $obj2->get();" to "echo $obj3->get();" in my code, you still get the same results. If you comment out "$obj->share($obj2);" the code returns 1, which is what you would expect. If this is the expected behavior, then it is not clearly documented. If that is the case, this bug should probably be changed to a documentation bug, and this example should be added to the documentation with a detailed explanation. Previous Comments: --------------------------------------------------------------------------- [2001-07-05 15:05:26] [EMAIL PROTECTED] This is expected behavior. You are assuming that the object you had in $obj2 should be gone when you copy $obj to that var. That is not the case. It only changes what $obj2 points to. Take this case: $var=3; $var2=&$var; unset($var); echo $var2; $var2 is still 3. The reference is gone but not the value of the var. That is what makes references nice. Brian. --------------------------------------------------------------------------- [2001-07-05 10:54:01] [EMAIL PROTECTED] When objects that contain objects that are referenced elsewhere, they are not correctly dereferenced, and strange side effects result class Foo{ var $a; function Foo($value) { $this->set($value); } function set($value) { $this->a = $value; } function get() { return $this->a; } } class Bar{ var $a; function Bar($value) { $this->a = new Foo($value); } function set($value) { $this->a->set($value); } function get() { return $this->a->get(); } function share($other) { $this->a = & $other->a; } } //Objects are initialized $obj = new Bar(1); $obj2 = new Bar(2); //$obj and $obj2 both contain an internal reference to the //same Foo object, with a value of 2 $obj->share($obj2); //$obj2 now references a new Bar object with a new //Foo object containing a value of 3 $obj2 = new Bar(3); //$obj2 should be a copy of $obj1 and contain a new //Foo object with a value of 2 $obj2 = $obj; //Somehow, this also changes the value in $obj2 $obj->set(4); //In a sane world, this outputs 2 //In reality, we get a 4 echo $obj2->get(); --------------------------------------------------------------------------- Full Bug description available at: http://bugs.php.net/?id=11909 -- 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]