Hello Can someone please help explain how the order of object destructors called at shutdown is determined, especially with regards to objects composed of other objects? For example in the code below, the first example calls the destructors exactly in the order I would expect. Since object B is still referenced by object A, A is destroyed first, then B. However in the second example, it appears that object B is destroyed before object A, even though A still references B. Can someone please shed some light on this? Thanks. James <?php class A{ public function __construct($b){ $this->b = $b; } public function __destruct(){ echo __class__ . " destroyed\n"; } } class B{ public function __destruct(){ echo __class__ . " destroyed\n"; } } $b = new B(); $a = new A($b); ?> Outputs: A destroyed B destroyed However if I add the class A{ public function __construct($b){ $this->b = $b; $this->myself = $this; // <--- This is the only change } public function __destruct(){ echo __class__ . " destroyed\n"; } } class B{ public function __destruct(){ echo __class__ . " destroyed\n"; } } $b = new B(); $a = new A($b); ?> That outputs: B destroyed A destroyed -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php