data = "A before"; $this->B = new B($this); } function set_data($value) { $this->data = $value; } function do_print() { print "{$this->data}\n"; } function do_print_from_B() { $this->B->A->do_print(); } } class B { var $A; var $data; function B(&$a_ref) { $this->data = "B before"; $this->A = &$a_ref; } } $a = new A(); $a->set_data("A after"); $a->do_print(); $a->do_print_from_B(); ?> result is: A after A before result *should* be: A after A after