unserialize и ссылки на себя

camka

не самка
unserialize и ссылки на себя

Если у массива имеются ссылки на самого себя, то при сериализации и последующей десериализации эти ссылки каким-то образом портятся.
PHP:
<?php

class test
{
	public $children = array(); // массив детей
	public $parent = null;        // ссылка на родителя
	public $id = 0;                   // уникальный идентификатор узла

	public function __construct($id)
	{
		$this->id = $id;
	}

	public function add_child(test $child)
	{
		$this->children[] = $child;
		$child->parent = $this;
	}
}

$filename = '/tmp/fdfd.txt';

if (is_readable($filename)) // если файл существует
{
	// Достаем объект из файла и десериализуем
	$root = unserialize(file_get_contents($filename));
	unlink($filename);
}
else
{
	// Есле файла нет, создаем новый объект и 
	// аккуратно складываем его в файл в сериализованном виде
	$root = new test('root');
	$root->add_child($child1 = new test('child'));
	file_put_contents($filename, serialize($root));
}

// Изменяем текущий узел
$root = $root->children[0]; // $root =& $root->children[0]; 


echo "<pre>";
var_dump($root);

?>
При извлеченном из файла объекте в итоге получаем
Код:
object(test)#2 (3) {
  ["children"]=>
  array(0) {
  }
  ["parent"]=>
  NULL
  ["id"]=>
  string(5) "child"
}
То бишь, ссылка на родителя теряется, поскольку сама переменная $root переопределена.

Однако, при инициализации переменной непосредственно в ходе программы, ссылочная целостность остается в норме:

Код:
object(test)#2 (3) {
  ["children"]=>
  array(0) {
  }
  ["parent"]=>
  object(test)#1 (3) {
    ["children"]=>
    array(1) {
      [0]=>
      object(test)#2 (3) {
        ["children"]=>
        array(0) {
        }
        ["parent"]=>
        object(test)#1 (3) {
          ["children"]=>
          array(1) {
            [0]=>
            *RECURSION*
          }
          ["parent"]=>
          NULL
          ["id"]=>
          string(4) "root"
        }
        ["id"]=>
        string(5) "child"
      }
    }
    ["parent"]=>
    NULL
    ["id"]=>
    string(4) "root"
  }
  ["id"]=>
  string(5) "child"
}
Меня интересует, является ли подобное поведение естественным для ПХП, или же стоит заслать баг-репорт?

P.S.: ПХП 5.0.5
 
Сверху