|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2001-07-05 15:05 UTC] brianlmoon@php.net
[2001-07-05 15:48 UTC] nassar at wpi dot edu
[2001-07-05 18:02 UTC] brianlmoon@php.net
[2001-07-06 09:16 UTC] nassar at wpi dot edu
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 04:00:01 2025 UTC |
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();